为什么我们可以使用'this'作为实例方法参数?

Har*_*hna 23 java parameters this java-8

什么是receiverJava中的参数?Java 8语言规范谈论this.

ass*_*ias 28

JLS提供了一个提示:

无论哪种方式,接收器参数仅用于允许在源代码中表示所表示的对象的类型,以便可以注释该类型.

这两种方法是等效的:

class Test {
    void m1() { }
    void m2(Test this) { }
}
Run Code Online (Sandbox Code Playgroud)

但是后者允许您添加注释:

void m2(@MyAnnotation Test this) { }
//where MyAnnotation can be defined like this for example:
@Target(ElementType.TYPE_USE) @interface MyAnnotation {}
Run Code Online (Sandbox Code Playgroud)

  • 另一个例子在http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#d5e14278中给出,其中在构造期间没有外部类型的封闭实例可用 (2认同)

Deb*_*sis 7

Receiver参数允许传递参数并从这些参数中提取其他信息.明确写入接收器的唯一目的是使注释接收器的类型成为可能.现在,如果实现AnnotatedElement接口,则可以调用类的getAnnotation()方法来获取注释类型.有关更多信息,请阅读此内容.