最近from this question我了解到以下似乎是合法的java:
class Bar {
void foo(Bar this) {}
}
现在,我试图在java标准中找到允许你这样做的地方,并查看了here,但我无法找到该部分。
有人可以引用它允许这种形式的方法声明的地方以及声明名为this
的参数的限制是什么?
答案 0 :(得分:12)
对于1.8或更高版本的JDK版本有效。
receiver参数是实例方法或内部类构造函数的可选语法设备。对于实例方法,receiver参数表示调用该方法的对象。对于内部类的构造函数,receiver参数表示新构造的对象的直接封闭实例。无论哪种方式,接收器参数仅用于允许在源代码中表示所表示对象的类型,以便可以对类型进行注释。
如果您阅读完整的要点,则可以找到以下注释,
如果允许接收器参数,则其类型和名称指定如下:
在实例方法中,receiver参数的类型必须是 声明方法的类或接口,以及名称 接收器参数必须是这个;否则,编译时错误 发生。强>
在内部类的构造函数中,接收器参数的类型 必须是直接封闭的类或接口 内部类的类型声明和接收者的名称 参数必须是标识符。这标识符很简单 直接封闭的类或接口的名称 内部类的类型声明;否则,编译时错误 发生。强>