Когда вы делаете:
A("test").B
Вы говорите: «Извлечь что-то из экземпляра A» - в данном случае это класс.Тем не менее, это не тот синтаксис, который вы ищете в вашем случае.Вы можете получить в основном все что угодно, но получение справки - это отдельная проблема.Если вы хотите получить функцию, синтаксис отличается от получения поля или вызова функции.Хотя это не очень важно, но все же стоит помнить об этом.
Поскольку B является внутренним классом, вы до сих пор совершенно правы, что сначала вам нужен экземпляр A.Но вам также нужен экземпляр B. Когда вы инициализируете B, он все еще «связан» с родительским классом, поэтому вы можете обращаться к внешним переменным без каких-либо проблем.Тем не менее, это все еще инициализируемый класс - и вам нужно его инициализировать.
Так что вам также нужно инициализировать B.Синтаксис Kotlin для этого довольно хорош (где синтаксис в Java немного ужасен ) - все, что вам нужно добавить, это ()
в конце.
Итак, вы получите следующее:
val b = A("test").B()
// ...
Это потому, что это внутренний класс.Если бы у вас был статический внутренний класс (в Kotlin, это класс внутри класса без ключевого слова inner
), инициализация была бы A.B()
- A не инициализировалась в этих случаях.
Вы также можете разделить инициализацию:
val a = A("test")
val b = a.B();
Когда у вас есть переменная, она точно такая же, как и любая другая переменная - единственное отличие здесь - инициализация.