我在包mypackage
類MyClass
它看起來像這樣:Java反射.getMethod INT VS整數
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"
}
}
還有一類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);
}
}
這裏調用該方法時會發生什麼:
int number = 3;
new Invoker().call("mypackage.MyClass", "myMethod", number)//->i is an Integer
Is there一種方法來指定我可能會用int
作爲參數調用該方法?
我的猜測是,當int
爲Serializable
對象被傳遞,它會自動被解析到其表弟,真正的對象,Integer
,但我不是一個Java專家...
更新 這與here不是同一個問題,因爲那裏有一個直接調用,這裏有一個方法,它把int
變成Integer
。正如我之前提到的那樣,這是我的想法,但希望其他人對此事的看法和知識。
你是對的,給你的代碼,沒有辦法繞過它。你可以爲'call'創建原始的專門化。 – Tunaki
如果你對同一個方法有一個原始的和匹配的盒裝值超載,那會引發一些像這樣的問題。理想情況下,你應該改變你的班級,以便方法有不同的名字。但是,如果沒有這個,你可以跟@Tunaki說的一樣。 – biziclop
根據參數類型查找方法在許多情況下不起作用。例如,傳遞一個字符串來調用一個以Object爲參數的方法也是行不通的,因爲'getMethod()'需要方法參數的實際聲明類型。 –