此 Java 空检查的最佳方法是什么?我应该使用可选的吗?
What would be the best approach for this Java null check? Should I use an Optional?
我想实现以下目标:
LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("someString", object.getObjectField().getValue());
如果 object.getObjectField()
为空,则我得到 NullPointerException
。我可以通过以下空检查轻松避免它:
if(object.getObjectField() != null) {
linkedHashMap.put("someString", object.getObjectField().getValue());
} else {
linkedHashMap.put("someString", "N/A");
}
然而,我想找到一个更好更漂亮的实现,使用 Java 8 可选,但在这种情况下我仍然收到 NullPointerException
:
linkedHashMap.put("someString", Optional.ofNullable(object.getObjectField().getValue()).orElse("N/A");
在这种情况下,正确的方法是什么?
but in this case I still receive a NullPointerException
那是因为即使 getObjectField()
为空,您仍然会调用 getValue()
。
您可以使用 Optional.map
来应用函数(如果存在):
Optional.ofNullable(object.getObjectField()).map(ObjectType::getValue)
如果你想使用默认值,你可以在后面加上orElse
:
Optional.ofNullable(object.getObjectField()).map(ObjectType::getValue)
.ofElse("N/A")
我想实现以下目标:
LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("someString", object.getObjectField().getValue());
如果 object.getObjectField()
为空,则我得到 NullPointerException
。我可以通过以下空检查轻松避免它:
if(object.getObjectField() != null) {
linkedHashMap.put("someString", object.getObjectField().getValue());
} else {
linkedHashMap.put("someString", "N/A");
}
然而,我想找到一个更好更漂亮的实现,使用 Java 8 可选,但在这种情况下我仍然收到 NullPointerException
:
linkedHashMap.put("someString", Optional.ofNullable(object.getObjectField().getValue()).orElse("N/A");
在这种情况下,正确的方法是什么?
but in this case I still receive a NullPointerException
那是因为即使 getObjectField()
为空,您仍然会调用 getValue()
。
您可以使用 Optional.map
来应用函数(如果存在):
Optional.ofNullable(object.getObjectField()).map(ObjectType::getValue)
如果你想使用默认值,你可以在后面加上orElse
:
Optional.ofNullable(object.getObjectField()).map(ObjectType::getValue)
.ofElse("N/A")