неудачи отражения java - PullRequest
       3

неудачи отражения java

1 голос
/ 06 марта 2011

Редактировать: не читать это, я ЕСМЬ глупый:)


у меня есть классы животных и собак

public class animal{
    public static String getTitle(){ return "bla"; }
}


public class dog extends animal{
    public static String getTitle(){ return "bla2"; }
}

, когда я делаю

animal p1=new animal();
animal p2=new dog();
System.out.println(p2.getClass().getDeclaredMethod("getTitle"));

я получаю

Main.java:16: unreported exception java.lang.NoSuchMethodException; must be caught or declared to be thrown
System.out.println(p2.getClass().getDeclaredMethod("getTitle"));

однако, если я делаю getDeclaredMethods там указан getTitle.

я тупой или просто еще одна причина ненавидеть Java?

1 Ответ

2 голосов
/ 06 марта 2011

Вам нужно будет окружить этот оператор блоком try/catch, поскольку он использует кэшированное исключение.По сути, это означает, что компилятор будет гарантировать, что у вас есть какой-то способ обработки того, что происходит в случае возникновения ошибки, чтобы избежать недружественного экрана сбоя, отображаемого для пользователей.

В вашем случае вы должны сделать что-то вроде:

animal p1 = new animal();
animal p2 = new dog();
try {
  System.out.println(p2.getClass().getDeclaredMethod("getTitle"));
} catch(NoSuchMethodException e) {
  // error handling in the case getTitle() doesn't exit
}

Если вы вообще не хотите обрабатывать исключения и предпочитаете просто передавать их, не прося компилятор проверять их, вы можете заключить весь свой код в следующее:

try {
  // ...
} catch(Exception e) {
  throw new RuntimeException(e);
}

Однако, как правило, это не очень хорошая практика Java.

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