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

Wor*_*der 12 java methods language-lawyer

最近从这个问题我得知以下似乎是合法的java:

class Bar {
    void foo(Bar this) {}
}
Run Code Online (Sandbox Code Playgroud)

现在,我试图找到java标准中的哪个位置表示你可以这样做,并且在这里查看但我找不到该部分.

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

Sur*_*tta 12

它适用于1.8或以上的JDK版本.

以下是JLS的说法

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

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

在允许接收器参数的情况下,其类型和名称指定如下:

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

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

  • @Gikkman最后一句解释了原因:*receiver参数仅用于允许在源代码中表示所表示对象的类型,**以便类型可以注释**.*虽然我认为它的确意味着:所以(隐式)*参数*可以注释. (2认同)
  • 我已经阅读了您的编辑 5 次,但我仍然不明白。猜猜我在这里找到了需要进一步查找的东西,谢谢:-) (2认同)