我尝试使用反射来调用类funcA()
的{{1}}。但是,ClsA
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 [] 调用varargs方法调用(Object,Object ...) 类型方法。也可以将其转换为Object以获得varargs 调用
答案 0 :(得分:3)
可以有两种类型的方法调用,一种是使用固定参数调用,另一种是使用变量参数调用。
如果你只提供null作为参数,那么java不清楚该方法是用于变量参数还是根本没有参数(因为变量参数也可能不接受任何参数)。
所以它要求明确提及像(Object [])null或(Object)null,即使你不想提供任何参数。
答案 1 :(得分:2)
由于方法签名为(Object obj, Object... vars)
,除非您声明空转,否则最前进的方法是不包含任何参数。
上述代码中的示例:
retStr = (String) funcA.invoke(clsA);
任何时候有VarArgs(Something ...),它意味着0或更多。