我有以下情况:
public ArrayList<A> getMethods(){
return b.c.test();
}
所以,我的问题是b.c.test()
返回一个值Optional<A>
作为返回类型。但我需要返回一个ArrayList<A>
.
所以,我尝试将其转换并重写为:
public ArrayList<A> getMethods(){
return (ArrayList<A>)b.c.test();
}
但 Eclipse 说这样的演员来自Optional<A>
to ArrayList<A>
is 不可能。
我怎么解决这个问题?
我假设您的预期语义是“如果存在值,则返回包含单个项目的列表,否则返回空列表。”在这种情况下,我会建议如下:
ArrayList<A> result = new ArrayList<>();
b.c.test().ifPresent(result::add);
return result;
不过我建议你的返回类型应该是List<A>
而不是ArrayList<A>
因为这使您有机会更改列表类型而不更改调用者。它还可以让你返回Collections.EMPTY_LIST
如果可选值不存在,这比创建不必要的值更有效ArrayList
.
Update:Java 9 现在有一个更简单的选项:
b.c.test().stream().collect(Collectors.toList());
Update:使用 Java 16 甚至更简单的选择:
b.c.test().stream().toList();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)