我该如何初始化一个 Optional<List<T>>?

3

这很简单。我有一个列表字段,它可能存在,也可能不存在(但必须与null作为未初始化的字段不同),但是尽管如此,我可以这样做:

List<String> mylist = new ArrayList<>();

我做不了

Optional<List<String>> mylist = Optional.of(new ArrayList<String>());

由于类型不匹配,这是不幸的。我不想硬编码我的代码来使用ArrayList。

有没有解决办法?


4
“Optional<List<String>> mylist = Optional.of(new ArrayList<String>());”对我来说编译得很好。类型匹配没有理由不对应。如果你无法编译成功,请附上你使用的javac版本所得到的错误信息。 - Alexis C.
1
你使用的是哪个Java版本和IDE? - flo
2
@flo 是的,我找到了。问题是一个符合性设置,它是针对Java 1.7的。 - Antares42
3
顺便提一下,将List放入Optional很少是一个好主意。它是否应该与空列表不同? - Tagir Valeev
@TagirValeev 是的,我考虑过了。但是,我需要区分字段未设置和字段有意设置为 null,而我不能相信我的用户会提供一个空列表。 - Antares42
显示剩余4条评论
2个回答

5
我认为错误出在你的语法上。
这个对我有效。
Optional<List<String>> mylist = Optional.of(new ArrayList<String>());

请注意,将分号改为行尾。

抱歉,不是的,那只是我打字太快了。分号放置得很正确。 - Antares42
你能粘贴你的 #import 列表吗?可能是错误的导入。 - Mike Murphy
请看我的回答,问题出在我的项目设置上。JDK兼容性设置为1.7,所以Eclipse抱怨是非常正确的。 - Antares42
1
Optional<List<String>> mylist = Optional.of(new ArrayList<>()); //--->够了 - Anthony Piñero

1
问题不是Java,而是我的Maven项目设置。
我在我的pom.xml中写了这个。
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>

Eclipse将其作为Java编译器导入,然后设置为JDK兼容性为1.7,并且发出了正确的抱怨。

将其设置为1.8后,我的代码现在可以编译。


恭喜您成功运行!请接受答案(点击左侧的大勾)以显示已解决您的问题。 - Adam Michalik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接