Подтвердить что ты не робот

Почему мы можем использовать 'this' как параметр метода экземпляра?

Что такое receiver параметр в Java? Спецификация языка Java 8 говорит о this.

4b9b3361

Ответ 1

JLS дает подсказку:

В любом случае параметр приемника существует только для того, чтобы разрешить тип отображаемого объекта в исходном коде, так что тип может быть аннотирован.

Эти два метода эквивалентны:

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() вашего класса, чтобы получить тип аннотации. Для получения дополнительной информации вы можете прочитать this.