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

Java: Использование "this" в качестве имени аргумента/параметра метода экземпляра?

Недавно из этого вопроса Я узнал, что следующее правовое java:

class Bar {
    void foo(Bar this) {}
}

Теперь я попытался найти, где в стандарте java говорится, что вам разрешено это делать, и посмотрел здесь, но я не удалось найти раздел.

Может ли кто-нибудь указать, где он разрешает эту форму объявления метода и каковы ограничения объявления аргумента с именем this?

4b9b3361

Ответ 1

Он действителен с версиями JDK версии 1.8 или выше.

А вот JLS говорит, что

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

Если вы читаете полные маркеры, вы найдете нижеприведенные заметки,

Если параметр приемника разрешен, его тип и имя указаны следующим образом:

  • В методе экземпляра тип параметра приемника должен быть класс или интерфейс, в котором объявлен метод, а также имя параметр приемника должен быть таким; в противном случае ошибка времени компиляции происходит.

  • В конструкторе внутреннего класса тип параметра приемника должен быть класс или интерфейс, который является непосредственным объявление типа внутреннего класса и имя получателя Параметр должен быть идентификатором. это где Идентификатор является простым имя класса или интерфейса, который является непосредственным объявление типа внутреннего класса; в противном случае ошибка времени компиляции происходит.