Какова цель свойства `val` с модификатором` final`? - PullRequest
0 голосов
/ 25 октября 2018

Недавно IntelliJ предложил добавить final к одному из val свойств.Это конкретное свойство было инициализировано в блоке init {}.Я пытался выяснить, какова семантика конструкции final val и когда я должен ее использовать, но Kotlin - все об неизменности и о том, как val эквивалентен final в Java, и поэтому результаты были настолько шумными, чтоЯ ничего не смог найти.

Пример:

final val id: Int // `final` suggested by IDE

init { id = 1 }

Что означает и возможно использование подобного свойства?Применяя final, какие ограничения это подразумевает помимо неизменности, что уже известно?Имеет ли это какое-либо отношение к наследованию или внешнему доступу?

IntelliJ прекратил предлагать final, если свойство private.

1 Ответ

0 голосов
/ 25 октября 2018

Пример как таковой не должен предлагать добавление final, так как в этом случае он ничего не делает.Единственное место, где добавление final имеет смысл в Kotlin, - это когда переопределяет членов .Добавляя final к переопределенному свойству (или методу), вы предотвращаете его переопределение подклассами.

Например:

open class A {
    open val x: Int = 0
}

open class B : A() {
    final override val x: Int = 25
}

class C : B() {
    override val x: Int = 56 // Error: `x` in `B` is final and cannot be overridden
}

Ключевое слово final не применимо, если:

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