Как вызвать метод void в Java с помощью отражения - PullRequest
3 голосов
/ 15 февраля 2012

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

Например,метод, который я хочу вызвать:

public int setScore(int n)
{
this.score = n;
return 1;
}

Как я его называю:

Method setScore = myClass.getMethod("setScore", new Class<?>[]{int.class});
Object returnValue = setScore.invoke(builder, new Object[]{theScore});

Изменение типа возвращаемого значения на void и его вызов, кажется, всегда вызывает исключение нулевого указателя.Нужно ли мне изменить подход к пустым методам?

Спасибо

Ответы [ 2 ]

5 голосов
/ 15 февраля 2012

Можете ли вы показать нам, куда брошен NullPointerException? Этот код работает правильно:

public void setScore(int n)
{
    this.score = n;
}

Обратите внимание, что я немного упростил ваш код с помощью varargs:

Method setScore = builder.getClass().getMethod("setScore", int.class);
Object returnValue = setScore.invoke(builder, theScore);

Очевидно, что в этом случае returnValue равно null.

1 голос
/ 15 февраля 2012

Если ваш метод больше ничего не возвращает, не присваивайте результат его вызова:

setScore.invoke(builder, new Object[]{theScore});

Это само по себе не будет , однако: единственная причина, по которой яможет видеть, что вы получите NullPointerException, если бы вы попытались использовать переменную, которой вы присвоили результат (returnValue) позже, так как invoke возвращает null, если метод возвращаеттип void.

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