gpt4 book ai didi

groovy - 为什么在 Groovy 中 Map.class 返回 null?

转载 作者:行者123 更新时间:2023-12-04 16:43:00 26 4
gpt4 key购买 nike

我在 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 返回 null ?

最佳答案

你得到 NullPointerException 因为

obj2.class

不会翻译成

obj2.getClass()

而是为了

obj2.get("class")

这是因为您的案例示例中的 obj2 属于 Map 类型,并且您使用属性表示法。这意味着 obj2.class 返回一个与名为 class 的键关联的值,并且与该键关联的键值条目在您的映射中不存在,因此它返回。然后你调用 getName() 方法得到 NullPointerException

Groovy 文档页面 Working with collections, 2.2. Map property notation 中描述了此用例。 :

Note: by design map.foo will always look for the key foo in the map. This means foo.class will return null on a map that doesn’t contain the class key. Should you really want to know the class, then you must use 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

关于groovy - 为什么在 Groovy 中 Map.class 返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55866178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com