这样做时Stream.of(1, 32, 12, 15, 23).map(Integer::toString);我收到一个模棱两可的类型错误。可以理解的是,编译器无法确定我是指toString(int)还是toString()from Integer。当不使用方法引用时,我可能通过显式转换摆脱了困境,或者长时间写了泛型,但是如何让编译器知道我的意思呢?我可以使用什么语法(如果有)来明确表达?
3 回答
Helenr
TA贡献1780条经验 获得超4个赞
没有方法可以使方法引用明确。简而言之,方法引用是仅明确的方法引用才支持的功能。因此,您有两种解决方案:
使用lambda表达式:
Stream.of(1, 32, 12, 15, 23).map(i->Integer.toString(i));
(至少在我看来更是如此)int当源int仅由原始值组成时,请使用原始值流:
IntStream.of(1, 32, 12, 15, 23).mapToObj(Integer::toString);
这将使用静态Integer.toString(int)方法来使用int值。
胡说叔叔
TA贡献1804条经验 获得超8个赞
由于Integer.toString()overrides Object.toString(),在这种特殊情况下,您可以按以下方式对其进行修复:
Stream.of(1, 32, 12, 15, 23).map(Object::toString);
梦里花落0921
TA贡献1772条经验 获得超6个赞
使用方法引用的主要选项是:
Stream.of(1, 32, 12, 15, 23).map(String::valueOf);
IntStream.of(1, 32, 12, 15, 23).mapToObj(Integer::toString);
您当前的版本可能是i -> i.toString()或i -> Integer.toString(i)。
添加回答
举报
0/150
提交
取消