环境
Java:1.8+
IDEA:2019.1.1
前言
// age 是Optional<Integer>
detail.setPatientAge(age.get() == null ? "" : age.get().toString());
上面这么写,在age
为empty
情况下,会报空指针;
后来改成:
age.map(Integer::toString).orElse("")
但是呢,,,会报标题上的错误;
分析
原因非常简单,就是Integer
里面有多个toString()
方法的重载,导致推断不出来。
Integer
类里面有 静态方法toString()
,也有实例方法toString()
;
age.map(Integer::toString)
这个表达式,即可以推断出:
Integer.toString(age)
也可以推断出:
age.toString()
这里产生了歧义,所以有问题;
解决
age.map(a -> String.valueOf(a)).orElse("");
// 或者
age.map(a -> a + "").orElse("")
目的是为了转成String
,
所以只要在map
里面写入能转成String
的方法就行;