为什么在尝试反思空参数函数时发出警告
问题描述:
我试图使用反射来调用ClsA
类的funcA()
。但Eclipse Juno
正在TestA
级别备注中显示警告,并且warning (A)
如下所示。为什么在尝试反思空参数函数时发出警告
的ClsA
是这样的:
public class ClsA {
String varA;
...
...
private String funcA() {
return varA;
}
}
这是我使用反射呼叫funcA()
代码:
public class TestA {
public static void main(String[] args) {
ClsA clsA = new ClsA();
Class noparam[] = {};
Method funcA;
String retStr;
funcA = ClsA.class.getDeclaredMethod("funcA", noparam);
funcA.setAccessible(true);
retStr = (String) funcA.invoke(clsA, null); // warning (A)
}
}
这是警告我得到。基本上我不明白什么是警告试图带来的信息?我怎么能明确地施放null
?
型空的参数应该明确地被转换为对象[]为 从 型法可变参数方法调用(对象,对象...)的调用。它可替代地投射到Object对可变参数 调用
答
可以有2种类型的方法调用的,一个是固定的参数来调用,另一种是具有可变参数来调用。
如果你只提供null作为参数,那么java不清楚这个方法是用于变量参数还是根本没有参数(因为变量参数也可以不接受补偿)。
所以它要求明确提及像(Object [])null或(Object)null,即使您不想提供任何参数。
答
由于该方法的签名是(Object obj, Object... vars)
除非你宣布零投最前沿的做法是不包括任何参数。从上面的代码
实施例:
retStr = (String) funcA.invoke(clsA);
时间不限有可变参数(≠... ...)这意味着0个或更多。
为了让我的反思不那么模棱两可,我只是说'invoke(instance,new Object [] {/ * arguments * /})''。 – gparyani 2013-05-10 05:54:27
'(Object [])null或(Object)null'是最有趣的一个,现在我知道我该如何投出null;) – huahsin68 2013-05-10 06:14:52