可能重复:
How do I invoke a private static method using reflection (Java)?
因此,有一个名为“getInstance”的方法,它只返回某个类的实例。这是一个没有参数的静态方法。
我怎样才能调用该方法,并获取类的返回值(实例)?我尝试使用的每个方法都要求我在它看来的参数中有一个类的实例。
例如,我尝试使用
Method method = classLoader.loadClass("testClass").getMethod("getInstance", null);
Object object = method.invoke(null, null);
但是我总是在这一行得到一个空指针异常,
Object object = method.invoke(null, null);
我假设我得到的是因为它要求的对象是null。
感谢您的帮助。
编辑:方法不为空。我正在做一个System.out.println(method == null);
并打印出错误。
答案 0 :(得分:4)
您不希望null
作为您的参数或参数列表。相反,你可以做
Method method = classLoader.loadClass("testClass").getMethod("getInstance", new Class[0]);
Object object = method.invoke(null, new Object[0]);
或以下,因为它们是varargs方法。
Method method = classLoader.loadClass("testClass").getMethod("getInstance");
Object object = method.invoke(null);
// or works but is perhaps confusing.
Object object = method.invoke(null, null);
答案 1 :(得分:1)
对我来说,以下两段代码都可以正确地用于静态方法并打印出返回的值。
Method method = myClass.getMethod("getInstance", null);
Object object = method.invoke(null);
System.out.println("returned value: "+object);
以及
Method method = myClass.getMethod("getInstance", null);
Object object = method.invoke(null,null);
System.out.println("returned value: "+object);
我认为这取决于您使用的是哪个Java版本(1.5之前没有varargs)。我正在使用Java运行时v1.6。
答案 2 :(得分:0)
这不是问题。 If the underlying method is static, then the specified obj argument is ignored. It may be null.
因此,方法本身似乎必须为空。
答案 3 :(得分:0)
我打赌问题出在你的getInstance
方法中。你可以调试它或发布它。
答案 4 :(得分:-1)
使用getMethod("getInstance", null)
,你会说“获取一个名为'getInstance'且没有参数的方法”。
当您键入method.invoke(null, null)
时,您说“在对象上调用此方法'null',并将'null'作为第一个参数”。
您应该删除最后一个null
,然后输入:
Object object = method.invoke(null);