Java 反射 .getMethod int 与 Integer

reg*_*ngi 5 java reflection integer primitive-types

MyClass在包中有一个类,mypackage如下所示:

package mypackage;
public class MyClass{

    public static myMethod (Integer i) {
        return i + " is an Integer";
    }

    public static myMethod (int i){
        return i + " is an int"
    } 
}
Run Code Online (Sandbox Code Playgroud)

还有一个 class Invoker,它看起来像这样:

public class Invoker{

    public String call(String class_name, String method_name, Serializable[] parameters){
        int p_amount = parameters.length;
        Class<?> param_types = new Class[p_amount];

        // Get types of parameters
        for (int i = 0; i < p_amount; i++){
            param_types[i] = parameters[i].getClass();
        }

        // Get method with that signature
        Method m = Class.forName(class_name).getMethod(method_name, param_types); 

        // Invoke method with given parameters
        m.invoke(null, parameters); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

以下是调用该方法时发生的情况:

int number = 3;
new Invoker().call("mypackage.MyClass", "myMethod", number)//->i is an Integer
Run Code Online (Sandbox Code Playgroud)

有没有办法指定我可以将方法int作为参数调用?

我的猜测是,当int作为Serializable对象传递时,它会自动解析为它的表亲,真正的对象Integer,但我不是 Java 专家......

更新 这与这里的问题不同,因为有一个直接调用,这里有一个方法在这些框之间int进入一个Integer。正如我之前提到的,这是我的想法,但希望其他人对此事的意见和知识。

Dio*_*tti 5

是的,您可以使用int.classInteger.TYPE来标识整数基元。

  • 这不是这里的问题。到调用 getMethod() 时,参数已经装箱到一个 Integer 中,该方法无法知道它最初是什么。 (4认同)