为什么在尝试反映空参数函数时会发出警告

时间:2013-05-10 05:11:54

标签: java reflection

我尝试使用反射来调用类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   调用

2 个答案:

答案 0 :(得分:3)

可以有两种类型的方法调用,一种是使用固定参数调用,另一种是使用变量参数调用。

如果你只提供null作为参数,那么java不清楚该方法是用于变量参数还是根本没有参数(因为变量参数也可能不接受任何参数)。

所以它要求明确提及像(Object [])null或(Object)null,即使你不想提供任何参数。

Invoking Methods

答案 1 :(得分:2)

由于方法签名为(Object obj, Object... vars),除非您声明空转,否则最前进的方法是不包含任何参数。

上述代码中的示例:

retStr = (String) funcA.invoke(clsA);

任何时候有VarArgs(Something ...),它意味着0或更多。