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

2022-09-01 14:15:13

Java中的接收器参数是什么?Java 8 语言规范讨论 .this


答案 1

JLS给出了一个提示

无论哪种方式,receiver 参数的存在只是为了允许在源代码中表示所表示对象的类型,以便可以对类型进行注释。

这两种方法是等效的:

class Test {
    void m1() { }
    void m2(Test this) { }
}

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

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

答案 2

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