NoSuchMethodException проблема с отражением - PullRequest
1 голос
/ 14 апреля 2011

Итак, у меня есть что-то вроде:

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 () и у меня было то же исключение, поэтому я думаю, что это что-то другое (разве что это не находит методы суперкласса?).Мысли?

Ответы [ 4 ]

3 голосов
/ 14 апреля 2011

попробуйте использовать getMethod() вместо getDeclaredMethod. первый ограничивает вас конкретным экземпляром класса, последний включает всю иерархию. Кроме того, я предполагаю, что эвристика (например, «Манхэттен») написана с прописной буквы соответственно?

тем не менее, что-то вроде этого, вероятно, гораздо лучше обрабатывается с помощью перечислений и некоторого класса внутренней стратегии. Затем вы сопоставляете свои перечисления с реализацией соответствующей стратегии.

0 голосов
/ 14 апреля 2011

Я думаю, что проблема в том, что вы переменная myString не установлен на то, что должно быть. Я вставил бы какое-нибудь утверждение отладки, чтобы убедиться, что methodName именно то, что, как вы думаете, должно быть.

0 голосов
/ 14 апреля 2011

Я предлагаю вам использовать такую ​​библиотеку, как commons-beanutils, а не бороться с неприятностью прямого отражения.

Кроме того, в вашем примере кода есть пустой блок catch, которого лучше избегать.

0 голосов
/ 14 апреля 2011

Я думаю, это должно быть:

String methodName = "getHeuristic" + mystring;

Но я не знаю, как ваш компилируется.Какова переменная «эвристика», которая там находится в области видимости?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...