Why can we use ‘this’ as an instance method parameter?

The JLS gives a hint:

Either way, the receiver parameter exists solely to allow the type of the represented object to be denoted in source code, so that the type may be annotated.

These two methods are equivalent:

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

However the latter allows you to add annotations:

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

Leave a Comment