【发布时间】:2021-06-29 09:08:11
【问题描述】:
考虑以下两行代码:
final List<Path> paths = new ArrayList<>();
final FileVisitor<Path> fv = new SimpleFileVisitor<>();
对我来说,它们看起来很相似。但是,Java 编译器 (1.8) 拒绝第二行并显示消息“无法推断 SimpleFileVisitor 的类型参数”。
谁能解释一下,有什么问题吗?
【问题讨论】:
-
SimpleFileVisitor()构造函数受到保护。所以你不能这样称呼它。 -
我收到错误“'SimpleFileVisitor()' has protected access in 'java.nio.file.SimpleFileVisitor'”。构造函数受到保护。你无法访问它。我怀疑删除钻石会使错误消失...所以我不确定您为什么认为问题出在钻石上。
-
仍然是钻石运算符,因为你的问题的标题,我强调这一点。
-
钻石运算符使用的自动类型推断也有一些限制。 Java 不能总是自动推断类型,有时您必须手动指定它。有时它可以推断它但它不是您想要的类型,那么您还必须手动指定它。在您的特定情况下,问题在于代码无效,因此 Java 也无法推断类型。所以这只是other issue的后续问题。
标签: java generics diamond-operator