[英]How to assign primitive type value to a method args using Java reflection?
我是 Java 反射概念的新手。 我需要使用 Java 反射从特定类访问一个方法。 该方法具有三种不同类型的参数,如下所示,
public void print(int start, String middle, int end) {
System.out.println(start);
System.out.println(middle);
System.out.println(end);
}
我试着像这样调用那个方法,
...
method.invoke(null, "middle", null);
...
我得到了IllegalArgumentException 。 我知道 null 对于包装类型 args 是可以接受的,但我只是尝试了这种方法来了解它是如何工作的。
所以,我的主要问题是,如何通过反射将原始类型值传递给该方法参数? 另外,如何通过反射传递原始类型 arg 的默认值? (例如:让我们假设,我在运行时不需要结束 arg 值,那么如何为结束 arg 传递 0)
有没有办法解决这个问题?
假设你有这个类:
public class SomeClass {
public void print(int start, String middle, int end) {
System.out.println(start);
System.out.println(middle);
System.out.println(end);
}
}
您可以使用以下代码:
public class SomeOtherClass {
public static void main(String... args) {
try {
var instance = Class
.forName(SomeClass.class.getName())
.getConstructor()
.newInstance();
var printMethod = SomeClass.class.getMethod("print", int.class, String.class, int.class);
printMethod.invoke(instance, 0, "it's me", 0);
} catch (NoSuchMethodException | ClassNotFoundException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
System.err.println("An error has occurred while accessing method");
e.printStackTrace();
}
}
}
请注意,对于原始值,无需传递 is null
。 对于这些情况,您需要提供一个值,这又意味着反射性地调用该方法,如下所示:
printMethod.invoke(instance, 0, "it's me", 0);
请注意,这与直接调用方法相同,因为在这种情况下,尝试将null
作为整数的方法参数传递将导致编译错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.