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

问题描述:

我试图使用反射来调用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,即使您不想提供任何参数。

Invoking Methods

+0

为了让我的反思不那么模棱两可,我只是说'invoke(instance,new Object [] {/ * arguments * /})''。 – gparyani 2013-05-10 05:54:27

+0

'(Object [])null或(Object)null'是最有趣的一个,现在我知道我该如何投出null;) – huahsin68 2013-05-10 06:14:52

由于该方法的签名是(Object obj, Object... vars)除非你宣布零投最前沿的做法是不包括任何参数。从上面的代码

实施例:

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

时间不限有可变参数(≠... ...)这意味着0个或更多。