Java:使用“this”作为实例方法的参数/参数名称?

2022-09-04 21:20:21

最近从这个问题中,我了解到以下内容似乎是合法的java:

class Bar {
    void foo(Bar this) {}
}

现在,我试图找到java标准中的地方,它说你可以这样做,并查看了这里,但我找不到该部分。

有人可以引用它允许这种形式的方法声明的地方,以及声明名为的参数的限制是什么?this


答案 1

它适用于 1.8 或更高版本的 JDK 版本。

这是JLS说的

receiver 参数是实例方法或内部类的构造函数的可选语法设备。对于实例方法,receiver 参数表示为其调用该方法的对象。对于内部类的构造函数,receiver 参数表示新构造对象的立即封闭实例。无论哪种方式,receiver 参数的存在只是为了允许在源代码中表示所表示对象的类型,以便可以对类型进行注释。

如果您阅读完整的要点,您会发现以下提示,

如果允许接收方参数,则按如下方式指定其类型和名称:

  • 在实例方法中,receiver 参数的类型必须是声明该方法的类或接口,并且 receiver 参数的名称必须是 this;否则,将发生编译时错误。

  • 在内部类的构造函数中,receiver 参数的类型必须是类或接口,它是内部类的立即封闭类型声明,并且 receiver 参数的名称必须是 Identifier 。其中 Identifier 是类或接口的简单名称,它是内部类的紧闭类型声明;否则,将发生编译时错误。


答案 2