Какая польза от объектов getClass (). GetMethod? - PullRequest
3 голосов
/ 24 февраля 2012

Может кто-нибудь, пожалуйста, дайте мне знать, когда мы должны использовать:

Object.getClass().getMethod (action, null);

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

Method action = null;
 try {
    action = getClass().getMethod (action, null);
 }
 catch (NoSuchMethodException x) {
 }
 return (TAPResponse) action.invoke (this, null);

Что это делает в этом случае?

И почему оператор return таким образом?Что будет возвращено?

Ответы [ 4 ]

0 голосов
/ 24 февраля 2012

Другие комментарии говорят о документации для java.lang.Method. Что означает код:

В указанном вами коде вы в основном пытаетесь получить метод с именем "actionName" (я думаю, что это, в любом случае, опечатка), а затем вызываете этот метод. Это полезно, если вы хотите избежать большого количества if-else.

Например, вместо:

if ("first" .equals (actionName)) first ();

else if ("second" .equals (actionName)) second ();

.....

Вы можете заменить его на код, который вы вставили. Таким образом, вам не нужно изменять код и просто добавлять новый метод, и он будет поддерживаться как новое действие.

Пока вы убедитесь, что "actionName" очищено (например, вы не в конечном итоге вызываете что-то вроде deleteAll ), это хороший подход.

0 голосов
/ 24 февраля 2012

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

action = getClass().getMethod(null, null);

И это даст вам исключение NullPointerException.http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html#getMethod(java.lang.String, java.lang.Class ...)

getMethod находит метод в данном классе, где первый аргумент является именем метода, а остальные аргументы являются типами параметров.

То, что делает ваш код, пытается получить метод вашего класса по заданному имени (это не должно быть действием ... неужели это была проблема копирования-вставки?) И вызывает его в текущем классеэкземпляр (это).

Этот метод не принимает аргументов, поэтому null передается в качестве второго аргумента как getMethod, так и invoke (это избыточно, его можно опустить).

0 голосов
/ 24 февраля 2012

Я сомневаюсь, что этот код компилируется. Посмотрите на java.lang.Class # getMethod (...)

  public Method getMethod(String name,
                    Class... parameterTypes)
             throws NoSuchMethodException,
                    SecurityException

Он принимает имя открытого метода в этом классе и тип параметра, который принимает указанный метод. Он возвращает объект Method, который можно вызвать, передав экземпляр объекта, которому принадлежит этот метод, и параметры, которые он принимает.

Это то, что пытается сделать ваш код. (безуспешно, кажется)

0 голосов
/ 24 февраля 2012

Ваш код неверен и не будет компилироваться.

Посмотрите на Javadoc для класса.У него есть только один метод с именем getMethod:

getMethod(String name, Class<?>... parameterTypes)

У него нет метода с именем getMethod (), в котором в качестве первого параметра используется объект Method.

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