我在 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());
Run Code Online (Sandbox Code Playgroud)
输出是:
com.vo.ErrorInfoVO
com.vo.ErrorInfoVO
java.util.HashMap
Exception in thread "main" java.lang.NullPointerException:
Run Code Online (Sandbox Code Playgroud)
为什么obj2.class返回 null ?
你得到NullPointerException因为
obj2.class
Run Code Online (Sandbox Code Playgroud)
不会翻译成
obj2.getClass()
Run Code Online (Sandbox Code Playgroud)
而是为了
obj2.get("class")
Run Code Online (Sandbox Code Playgroud)
这是因为obj2在您的案例中,示例属于类型Map并且您使用了属性表示法。这意味着obj2.class返回与名为class的键关联的值,并且与该键关联的键值条目在您的地图中不存在,因此它返回null。然后你调用一个getName()方法,你得到NullPointerException.
此用例在 Groovy 文档页面使用集合 2.2 中进行了描述。地图属性符号:
注意:按设计
map.foo将始终foo在地图中查找密钥。这意味着foo.class将null在不包含类键的地图上返回。如果你真的想知道这个类,那么你必须使用getClass():Run Code Online (Sandbox Code Playgroud)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
| 归档时间: |
|
| 查看次数: |
437 次 |
| 最近记录: |