在Java上调用isPresent的最佳方法可选
我有以下代码,sonar在访问值错误之前会对其抛出一个检查“Optional#isPresent()”在Java上调用isPresent的最佳方法可选,java,sonarqube,optional,Java,Sonarqube,Optional,我有以下代码,sonar在访问值错误之前会对其抛出一个检查“Optional#isPresent()” private Map<String, Map<String, Object>> generateMap(Object object) { return Optional.ofNullable((List<Map<String, Object>>) object).map((obj) -> functionListToMap.app
private Map<String, Map<String, Object>> generateMap(Object object) {
return Optional.ofNullable((List<Map<String, Object>>) object).map((obj) -> functionListToMap.apply(obj)).get();
}
私有映射生成器映射(对象){
返回可选的.ofNullable((List)object.map((obj)->functionListToMap.apply(obj)).get();
}
我尝试了以下方法来修复错误,但我不确定这是否是最好的编码标准
private Map<String, Map<String, Object>> generateMap(Object object) {
Optional<List<Map<String, Object>>> result = Optional.ofNullable((List<Map<String, Object>>) object);
if(result.isPresent()) {
return result.map((obj) -> functionListToMap.apply(obj)).get();
}
else {
return null;
}
}
私有映射生成器映射(对象){
可选结果=可选的可调用((列表)对象);
if(result.isPresent()){
返回result.map((obj)->functionListToMap.apply(obj)).get();
}
否则{
返回null;
}
}
有人能告诉我还有其他最好的方法吗?未经检查的演员阵容是你应该尽量避免的。若您知道您的方法只能处理列表,那个么您的参数应该是这样键入的 我假设FunctionListMap是一个函数。这样调用它(functionListToMap.apply())几乎违背了函数接口的目的。相反,只需将其用作lambda 在这种情况下,如果没有数据,只想返回null,可以使用orElse()
私有映射生成器映射(列表){
返回可选的.ofNullable(list).map(functionListToMap).orElse(null);
}
如果要在不存在数据的情况下返回空映射,请改用orElseGet():
私有映射生成器映射(列表){
返回可选的.ofNullable(list).map(functionListToMap).OrelGet(HashMap::new);
}
使用orElse(new HashMap())的区别在于,对于orElse,无论是否使用,每次都会实例化另一个对象,而对于OrelSet(),只有在需要时才调用供应商(HashMap::new)
您也可以重写该方法,而无需选择:
private Map<String, Map<String, Object>> generateMap(List<Map<String, Object>> list) {
if (list == null) {
return null;
} else {
return functionListToMap.apply(list);
}
私有映射生成器映射(列表){
if(list==null){
返回null;
}否则{
返回函数listtomap.apply(列表);
}
}
或者,还要将FunctionListMap重写为一个方法:
private Map<String, Map<String, Object>> generateMap(List<Map<String, Object>> list) {
if (list == null) {
return null;
} else {
return functionListToMap(list);
}
}
私有映射生成器映射(列表){
if(list==null){
返回null;
}否则{
返回函数listtomap(列表);
}
}
可能使用orElse(Collections.emptyMap())
而不是get()?似乎您希望失败的强制转换为null。这是什么时候的事了?写这篇文章最好不要使用Optional
。
private Map<String, Map<String, Object>> generateMap(List<Map<String, Object>> list) {
if (list == null) {
return null;
} else {
return functionListToMap.apply(list);
}
private Map<String, Map<String, Object>> generateMap(List<Map<String, Object>> list) {
if (list == null) {
return null;
} else {
return functionListToMap(list);
}
}