Проверьте, содержит ли класс переменную экземпляра на основе его имени - PullRequest
4 голосов
/ 09 июля 2011

Иногда мне нужно проверить, какой класс объявил некоторую переменную (и), есть ли другой способ проверить это, если конкретный класс содержит переменную с некоторым именем

try {
   testLocalVariable = (String) (this.getClass().getDeclaredField("testVariable").get(this));
} catch (NoSuchFieldException ex) {
} catch (SecurityException ex) {
} catch (IllegalArgumentException ex) {
} catch (IllegalAccessException ex) {
}

Ответы [ 2 ]

2 голосов
/ 09 июля 2011

Если я правильно понимаю, вы используете этот код в суперклассе, чтобы проверить, имеет ли подкласс поле testVariable.

Почему бы вам просто не добавить такой метод?

 /**
  * Returns true if the object declares a testVariable field, false otherwise. Subclasses should
  * override this method
  */
protected boolean hasTestVariableField() {
    return false;
}

Мне кажется, что ОО гораздо больше, не нарушает инкапсуляцию.

Тем не менее, я не совсем понял, зачем вам это нужно.

2 голосов
/ 09 июля 2011

У классов есть поля, а не локальные переменные.

Вы можете использовать getDeclaredField(), однако это не приведет к обнаружению полей, объявленных суперклассами.

Вам не нужно искать значение полей, если вы не получите исключение, поле есть.

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