Позиция метки `@` в Котлине, обозначая приемник с `this`

Я новичок в Котлине. Мне любопытно узнать о различии помеченных в Kotlin с префиксом @ или postfix @ .

Я только что видел код, который пишет SignInActivity@this , который, похоже, работает точно так же, как this@SignInActivity .

Являются ли эти два точно такими же? Если нет, в чем разница между ними?

Я пытался провести некоторое исследование по *@this форме, но я не мог найти никаких ссылок на нее. Все, что я мог найти, это официальный документ, который демонстрирует this@* . Будет хорошо, если кто-нибудь может поделиться мной с правильной ссылкой, на которую я должен пойти.

SignInActivity@ this просто другое выражение для this , с функциональностью определения ненужного ярлыка SignInActivity (который не имеет ничего общего с фактическим именем класса).

Согласно грамматической документации Котлина :

 labelReference (used by atomicExpression, jump) : "@" ++ LabelName ; labelDefinition (used by prefixUnaryOperation, annotatedLambda) : LabelName ++ "@" ; 

hello@ – это просто ярлык с именем «hello» (для возвратов и переходов ),

тогда как @hello является ссылкой для помеченного цикла или блока.

Эти комбинированные выражения можно использовать следующим образом:

 loop@ for (i in 1..100) { for (j in 1..100) { if (...) break@loop //jump to loop@ } } 

SignInActivity @ это означает SignInActivity.this (Java) this @ SignInActivity означает – использование контекста SignInActivity вместо локального контекста (обычно находится в закрытии).

Intereting Posts
Безопасные звонки в Котлин с массивом путают Функции Высокого порядка Котлина в проекте Java Уведомлять наблюдателя, когда элемент добавлен в список LiveData версия kotlin, которая используется для построения с градиентом (1.1.2-5), отличается от той, что включена в плагин IDE (1.1.2-4) Val не может переназначить ошибку времени компиляции для локальной переменной в fun в kotlin Tornadofx Javafx – Как перезагрузить представление / компонент Как создать экземпляр анонимного класса, который реализует интерфейс в Kotlin Значение поля суммы JOOQ: BigDecimal to Int Как получить Kotlin KClass из строки имени класса пакета? Локальная система управления пакетами Java в стиле PIPON PIP? Импорт не используется в Android Studio Как работает интерполяция строк в Котлин? Kotlin inheritnce – Не передано значение для контекста параметра Почему Kotlin не может переопределить метод List <*> оператора? Android Things UserSensor.Builder – не удалось создать драйвер датчика расстояния