【发布时间】:2020-09-11 04:24:17
【问题描述】:
我有两段代码,一段是用java老风格写的,另一段是用lambda表达式写的,
第一个:
Class enumClass = getConstantsEnum();
Object[] enumConstants = enumClass.getEnumConstants();
for(Object o:enumConstants) {
try {
constantsMap.put(o.toString(),o.getClass().getDeclaredField("lookupValue").getInt(o));
} catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException
| SecurityException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
工作正常并正确填充地图
另一个:
Class enumClass = getConstantsEnum();
Object[] enumConstants = enumClass.getEnumConstants();
constantsMap.putAll(Arrays.asList(enumConstants)
.stream().collect(Collectors.toMap
(e -> e.toString(), e -> {
try {
return e.getClass().getDeclaredField("lookupValue").getInt(e);
} catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException
| SecurityException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally {
return null;
}
}
)));
给出空指针异常,但通过调试 e.getClass().getDeclaredField("lookupValue").getInt(e) 行我看到它被值填充
我的问题是: 1-这段代码有什么问题?
2-如何在 eclipse 中的流方法中有效地调试,有没有办法像在正常循环中一样查看元素在地图中的填充?我可以通过放置断点来查看第一个元素,但随后会立即触发异常
3- 是否有更简洁的方法来处理 lambda 表达式中的异常,我尝试使用 try/catch 包装整个代码,但编译器仍然抱怨未处理异常。
感谢任何问题的回答:)
编辑:
Holger 在 cmets 中回答了 Q1
添加了 IDE
【问题讨论】:
-
你得到的正是你想要的:
finally { return null; }。想想吧。 -
@Holger,好的,但是为什么抛出 NPE 不只是将 null 放入地图值
-
@holger .. gr8,谢谢