当前位置: 首页 > 知识库问答 >
问题:

什么时候是钻石操作员,什么时候不是?

梁丘洲
2023-03-14

考虑以下两行代码:

final List<Path> paths = new ArrayList<>();
final FileVisitor<Path> fv = new SimpleFileVisitor<>();

对我来说,他们看起来很相似。但是,第二行被Java编译器(1.8)拒绝,消息是“不能推断SimpleFileVisitor的类型参数<>”。

谁能解释一下,有什么问题吗?

共有1个答案

郑俊弼
2023-03-14

我不明白您怎么会得到错误消息不能推断类型参数,因为您的语法是正确的,除了正如许多人已经说过的那样,java.nio.file.SimpleFileVisitor类只有一个构造函数,它是受保护的:

protected SimpleFileVisitor() {
}

这意味着只有该类的子级可以初始化SimpleFileVisitor的实例,这就是代码不能编译的原因。

我不知道这个类,但通过快速查看代码,我猜他们只是希望您先扩展它(或者使用其他地方已经存在的扩展),然后在FileVisitor接口的实现中使用它。

如果您没有具体的子类可以使用,并且希望创建自己的MySimpleFileVisitor:

public class MySimpleFileVisitor<T> extends SimpleFileVisitor<T> {
    public MySimpleFileVisitor() {
        super(); //<-- here you have the right to call the protected constructor of SimpleFileVisitor
    }
}

...然后您将能够实例化您的类并使用已经实现的方法,如下所示:

FileVisitor<Path> fv = new MySimpleFileVisitor<>(); //<-- here you will be able to correctly infer parameter type as you do in your List example
fv.visitFile(file, attrs); //<-- here you enter the method implemented inside SimpleFileVisitor
 类似资料:
  • 本文向大家介绍什么时候用delegate,什么时候用Notification?相关面试题,主要包含被问及什么时候用delegate,什么时候用Notification?时的应答技巧和注意事项,需要的朋友参考一下 答:delegate针对one-to-one关系,并且reciever可以返回值 给sender,notification 可以针对one-to-one/many/none,recieve

  • 问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制

  • 问题内容: 我对JAX-WS进行了概述,并注意到了(和)的一些引用。 在什么情况下需要?(我认为JSR 109服务器?!) 问题答案: 是使用SUN的参考实现将Web服务作为标准存档部署在非Java EE5 Servlet容器上时所需的专有部署描述符。 Sun的RI 用作servlet上下文事件的侦听器和调度程序servlet。两者都必须在中声明。然后需要该文件为定义Web服务端点,以使其知道必须

  • 问题内容: 我怎么能说: 为什么函数调用中不需要括号,而最后一行呢? 问题答案: 是一个功能 调用该函数并产生该函数返回的任何值。 setTimeout的目的是在一段时间后运行代码。你需要的功能只是传递给它(这样的setTimeout可以自称在适当的时候函数),因为如果你将它传递给setTimeout的前调用的函数(用括号),将执行 现在 而不是1秒后,。

  • 问题内容: 我有一个将客户发送到另一个站点来处理付款的应用程序。客户之外的另一个站点在我们的服务器上调用一个页面,让我们知道付款的状态。被调用页面会检查付款应用程序提供的参数,并检查我们是否知道该交易。然后,它更新数据库以反映状态。这一切都无需与客户进行任何互动即可完成。 我个人选择将此功能实现为JSP,因为将文件拖放到文件系统中比编译和打包文件然后将条目添加到配置文件中要容易得多。 考虑到页面的