Java 如何初始化可选的<;列表<;T>>;?

Java 如何初始化可选的<;列表<;T>>;?,java,java-8,optional,Java,Java 8,Optional,这相当简单。我有一个列表字段,它可能存在,也可能不存在(但它必须不同于未初始化的null),但我可以这样做 List<String> mylist = new ArrayList<>(); List mylist=new ArrayList(); 我做不到 Optional<List<String>> mylist = Optional.of(new ArrayList<String>()); Optional mylist=Op

这相当简单。我有一个列表字段,它可能存在,也可能不存在(但它必须不同于未初始化的
null
),但我可以这样做

List<String> mylist = new ArrayList<>();
List mylist=new ArrayList();
我做不到

Optional<List<String>> mylist = Optional.of(new ArrayList<String>());
Optional mylist=Optional.of(new ArrayList());
因为类型不匹配。这是不幸的。我不想硬连接我的代码来使用ArrayList


有办法解决这个问题吗?

我认为错误在于您的语法

这对我有用

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

注意时间的变化;问题不在于Java,而在于我的Maven项目设置

我在我的
pom.xml

    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
1.7
1.7
Eclipse然后尽职尽责地将其作为Java编译器->JDK Compliance->1.7导入,并提出了合理的抱怨


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

Optional mylist=Optional.of(new ArrayList())编译对我来说很好。没有理由不匹配类型。另外,如果它不能为您编译,请包含您在javac版本中得到的错误消息。您使用的是哪个java版本和ide?@Eran,对不起,是的,我看到了,但这不是问题所在。我只是把它打错了SO@flo是的。我发现了它,问题是java 1.7的合规性设置作为旁注,将
列表
放入
可选
中很少是一个好主意。它应该和空列表不同吗?对不起,不是,只是我打字太快了。分号在正确的位置。你能粘贴到#导入列表中吗?导入可能是错误的。请看我自己的答案,问题是我的项目设置。JDK compliance被设置为1.7,因此Eclipse的抱怨是非常正确的真是太好了,恭喜你让它跑起来了!请接受答案(点击左边的大勾号),以表明它已经解决了您的问题。