[英]Class.getMethod not working
因此,我在下面有以下代碼,並在其他地方調用了Operators Op = new Operators()
。 但是,我在getMethod
調用中出錯。 我承認我不太確定如何使用它,並且通過閱讀其他人的代碼獲得了此結果,因此任何幫助都將非常有用。 謝謝。
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class Operators {
static Map<String, Method> METHODS = new HashMap<String, Method>();
String ADD = "+"; String MULTIPLY = "*"; String SUBTRACT = "-"; String DIVIDE = "/";
private static Class[] inputTypes = {Float.class, Float.class};
Operators() throws NoSuchMethodException, SecurityException {
METHODS.put(ADD, getMethod("add"));
METHODS.put(MULTIPLY, getMethod("multiply"));
METHODS.put(SUBTRACT, getMethod("subtract"));
METHODS.put(DIVIDE, getMethod("divide"));
}
static Method getMethod(String s) throws NoSuchMethodException {
return Operators.class.getMethod(s, inputTypes);
}
public static float add(float x, float y) {
return x+y;
}
public static float multiply(float x, float y) {
return x*y;
}
public static float subtract(float x, float y) {
return x-y;
}
public static float divide(float x, float y) {
return x/y;
}
}
編輯。 引用的行是return Operators.class.getMethod(s, inputTypes);
在getMethod
方法中。
一旦我了解了您到底想做什么,就可以為我提供一個更好的幫助的更好的主意,但是乍一看,可能就是這樣:
inputTypes-array
包含兩個Float.class-es
,但是您的方法使用基本類型。 帶大寫字母的Float
與小寫的float
不同,因此,我期望NoSuchMethodException
。
您還可以通過如下更改類來避免聲明輸入參數的類型,並且可以在構造函數之外進行操作:
公共類運營商{
static final String ADD = "+";
static final String MULTIPLY = "*";
static final String SUBTRACT = "-";
static final String DIVIDE = "/";
private static Method[] methods;
static Map<String, Method> methodsMap = new HashMap<String, Method>();
static {
methods = Operators.class.getMethods();
try {
methodsMap.put(ADD, getMethod("add"));
methodsMap.put(MULTIPLY, getMethod("multiply"));
methodsMap.put(SUBTRACT, getMethod("subtract"));
methodsMap.put(DIVIDE, getMethod("divide"));
} catch (NoSuchMethodException e) {
// handle error
e.printStackTrace();
}
}
static Method getMethod(String s) throws NoSuchMethodException {
for (Method method : methods) {
if (method.getName().equalsIgnoreCase(s))
return method;
}
throw new NoSuchMethodException(s);
}
public static float add(float x, float y) {
return x + y;
}
public static float multiply(float x, float y) {
return x * y;
}
public static float subtract(float x, float y) {
return x - y;
}
public static float divide(float x, float y) {
return x / y;
}
}
您可以使用方法映射:
System.out.println(Operators.methodsMap.get("+").invoke(null, 1.0, 1.0));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.