Котлин супер.финализ () - PullRequest
0 голосов
/ 17 мая 2018

При переходе на Kotlin с Java я столкнулся с проблемой. Я переопределил Object finalize() метод:

@Override
protected void finalize() throws Throwable {
    stopTimer();
    super.finalize();
}

Когда я попытался сделать то же самое с Kotlin, я нашел решения. Первый из документа:

 protected fun finalize() {
    stopTimer()
    super.finalize()
}

И второй из статьи (на русском языке):

@Suppress("ProtectedInFinal", "Unused")
protected fun finalize() {
    stopTimer()
    super.finalize()
}

Но в обоих случаях я не могу позвонить super.finalize() в соответствии с IDE, как говорится unresolved reference:finalize

Может быть, кто-нибудь знает, как получить эту работу в Kotlin? Спасибо.

1 Ответ

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

Вот контракт finalize на Java:

Метод finalize класса Object не выполняет никаких специальных действий; он просто возвращается нормально. Подклассы Object могут переопределять это определение.

Поэтому вы не обязаны звонить в суперкласс. Вы бы вызывали пустую реализацию.

Необходимость вызова super.finalize() возникает только в тех классах, которые не являются производными от kotlin.Any.

Остальная часть истории уже рассказана в официальной документации : просто объявите protected fun finalize().

...