и все работает отлично в любом случае.

ня я реализуюCloseable в Kotlin, и, как я делал в Java в прошлом, я хочу реализоватьfinalize() в качестве крайней меры в случае, если клиентский код забывает закрыть его, что делает критически важный ресурс невостребованным. Я считаю этот ресурс достаточно важным, чтобы добавить этот запасной вариант, несмотря на ненадежность этого запасного варианта. Тем не мение,kotlin.Any не объявляетfinalize метод, который означает, что я не могу просто сделать это:

class Resource: Closeable {
    fun close() {}
    override fun finalize() { close()}
}

Это не хорошо, по крайней мере, не так хорошо, как должно быть. Теперь я возвращаюсь к простой Java в качестве обходного пути. Кто-нибудь знает, как это сделать на чистом Kotlin?

PS: мой текущий обходной путь:

FinalizedCloseable.java:

public abstract class FinalizedCloseable implement Closeable {
    @Override protected void finalize() { close(); }
}

Котлин:

class Resource: FinalizedCloseable(), Closeable {
    fun close() {}
    override fun finalize() { close()}
}

Но этот обходной путь требует суперкласса. Если в следующий раз мой другойResource уже есть суперкласс, этот обходной путь не будет работать без большого количества шаблонов.

РЕДАКТИРОВАТЬ: Теперь я знаю, как реализовать finalize (), но плагин IDEA kotlin недостаточно умен, чтобы знать, что это финализатор, и поэтому пометить его с некоторым предупреждением. Поработав некоторое время, я нашел, как подавить эти предупреждения, и хочу поделиться им:

class C {
    @Suppress("ProtectedInFinal", "Unused") protected fun finalize() {}
}

Ответы на вопрос(1)

Ваш ответ на вопрос