那么,我已经有了这样的内容:
public abstract class myClass {
String myString;
int test;
public myClass(String heuristic) {
mystring = heuristic;
test = heuristicSwitch();
}
public int heuristicSwitch() {
int hTest = 0;
try {
String methodName = "getHeuristic" + myString;
Method actionMethod = myClass.class.getDeclaredMethod(methodName);
hTest = (Integer)actionMethod.invoke(this);
}
catch(Exception e) {
}
return hTest;
}
public int getHeuristicManhattan() {
return 100;
}
}
我难住了……我总是得到NoSuchMethodException
,但我不知道为什么。我认为问题可能是myClass是抽象的,所以我用getClass()尝试了这个,并且有同样的异常,所以我认为这是别的东西(除非这找不到超类方法?)。想法吗?
尝试使用getMethod()
代替getDeclaredMethod
。前者将您限制为特定的类实例,后者包括整个层次结构。此外,我假设启发式(例如。"Manhattan"(曼哈顿)大写得合适吗?
也就是说,通过使用枚举和某种内部策略类来处理这样的事情可能会好得多。然后将枚举映射到相关的策略实现。
我认为应该是:
String methodName = "getHeuristic" + mystring;
但是我不知道你的是如何编译的。这里的"启发式"变量是什么?
我建议您使用common_beanutils之类的库,而不是与直接反射的不愉快作斗争。
同样,您的示例代码有一个空catch块,最好避免。
我认为问题是你的变量myString
没有设置为它应该是什么。我会插入一些调试语句,以确保methodName
正是你认为它应该是。