NoSuchMethodException问题与反射



那么,我已经有了这样的内容:

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正是你认为它应该是。

相关内容

  • 没有找到相关文章

最新更新