繁体   English   中英

如何使用 Java 反射将原始类型值分配给方法 args?

[英]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);
    }

}

您可以使用以下代码:

  1. 使用反射实例化类
  2. 获取所需的方法
  3. 使用反射调用所需的方法
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM