Java:使用"这个"作为实例方法的参数/参数名称?

时间:2016-09-16 16:14:42

标签: java methods language-lawyer

最近from this question我了解到以下似乎是合法的java:

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

现在,我试图在java标准中找到允许你这样做的地方,并查看了here,但我无法找到该部分。

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

1 个答案:

答案 0 :(得分:12)

对于1.8或更高版本的JDK版本有效。

这是JLS saying that

  

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

如果您阅读完整的要点,则可以找到以下注释,

  

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

  • 在实例方法中,receiver参数的类型必须是 声明方法的类或接口,以及名称 接收器参数必须是这个;否则,编译时错误 发生。

  • 在内部类的构造函数中,接收器参数的类型 必须是直接封闭的类或接口 内部类的类型声明和接收者的名称 参数必须是标识符。这标识符很简单 直接封闭的类或接口的名称 内部类的类型声明;否则,编译时错误 发生。