Что такое receiver
параметр в Java? Спецификация языка Java 8 говорит о this
.
Почему мы можем использовать 'this' как параметр метода экземпляра?
Ответ 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.