Создание объекта в объявлении объекта в kotlin - PullRequest
0 голосов
/ 07 мая 2018

При просмотре документации kotlin на выражениях и объявлениях объектов я наткнулся на этот фрагмент

class MyClass {
    companion object Factory {
        fun create(): MyClass = MyClass()
    }
}

val instance = MyClass.create()

В строке 3 функция create создает экземпляр объекта MyClass()

Однако в последней строке для вызова create нам уже нужен объект MyClass (не так ли?).

Мой вопрос: в какой момент MyClass появляется?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Однако в последней строке для вызова create нам уже нужен объект MyClass (не так ли?).

Нет, последняя строка вызывает .create() для объекта-компаньона из MyClass. Сопутствующий объект является экземпляром отдельного класса (это не MyClass) и инициализируется до его первого использования, поэтому вам не нужен экземпляр MyClass для вызова .create().

Обратите внимание, что синтаксически .create() вызывается для имени класса MyClass, а не для обычного выражения, подобного вызову конструктора MyClass() или переменной myClass.

0 голосов
/ 07 мая 2018

Вызов val instance = MyClass.create() не зависит от экземпляра из MyClass, вы просто используете тип в качестве квалификатора для метода (это похоже на static методы в Java). Обратите внимание, что вы также можете написать MyClass.Factory.create(), хотя имя собеседника является избыточным при вызове его из Kotlin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...