Почему в Groovy Map.class возвращает ноль? - PullRequest
1 голос
/ 26 апреля 2019

У меня есть простой кусок кода в Groovy:

ErrorInfoVO vo = new ErrorInfoVO();
Object obj1 = vo;
System.out.println(obj1.class.getName());
System.out.println(obj1.getClass().getName());

Map map = new HashMap()
Object obj2 = map
System.out.println(obj2.getClass().getName());
System.out.println(obj2.class.getName());

Вывод:

com.vo.ErrorInfoVO
com.vo.ErrorInfoVO
java.util.HashMap
Exception in thread "main" java.lang.NullPointerException:

Почему obj2.class возвращает ноль?

1 Ответ

4 голосов
/ 26 апреля 2019

Вы получаете NullPointerException, потому что

obj2.class

не переводится в

obj2.getClass()

, а скорее в

obj2.get("class")

Это потому, что obj2 вваш пример имеет тип Map, и вы используете нотацию свойства.Это означает, что obj2.class возвращает значение, связанное с ключом с именем class, а запись значения ключа, связанная с таким ключом, не существует на вашей карте, поэтому она возвращает null.Затем вы вызываете метод getName() и получаете NullPointerException.

Этот пример использования описан на странице документации Groovy Работа с коллекциями, 2.2.Обозначение свойства карты :

Примечание: по схеме map.foo всегда будет искать ключ foo на карте.Это означает, что foo.class вернет null на карте, которая не содержит ключ класса.Если вы действительно хотите знать класс, то вы должны использовать getClass():

def map = [name: 'Gromit', likes: 'cheese', id: 1234]
assert map.class == null
assert map.get('class') == null
assert map.getClass() == LinkedHashMap // this is probably what you want
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...