Kotlin - Есть ли умный способ бросить NotImplementedError для всех методов класса?

Мне нужно реализовать интерфейс (ResultSet) имея сотни методов. На данный момент я собираюсь реализовать только подмножество этих методов, бросая NotImplementedError для остальных.

В Java я нашел два решения:

  1. Создать абстрактный класс AbstractResultSet реализации ResultSet, объявив все методы, чтобы бросить NotImplementedError, Нет взломов, но много шаблонного кода.
  2. использование Proxy.newProxyInstance реализовать все методы вместе в InvocationHandler, Меньше кода, но и меньше немедленного использования для других кодеров.

Есть ли третий вариант в Котлине?

В моем случае мне нужно реализовать ResultSet через набор данных IBM (с упакованными десятичными числами, двоичными полями, зонированными числами, строками с переменной длиной и т. д.), чтобы импортировать его в SQLServer через SQLServerBulkCopy, Я не знаю какой ResultSet методы вызываются этим классом, поэтому на данный момент я собираюсь реализовать только "наиболее используемые" методы, регистрируя вызовы нереализованного метода.

2 ответа

Извлечь стандартную функцию TODO, которая помечает задачу, а также выдает NotImplementedError

/**
 * Always throws [NotImplementedError] stating that operation is not implemented.
 *
 * @param reason a string explaining why the implementation is missing.
 */
@kotlin.internal.InlineOnly
public inline fun TODO(reason: String): Nothing = throw NotImplementedError("An operation is not implemented: $reason")

Использование:

fun foo() {
        TODO("It will be soon")
    }

Таким образом, вы также можете находить не реализованные выборки, используя вкладку "todo" в среде IDE. Это плюс.

Вы можете создать интерфейс MyResultSet которые наследуются от ResultSetи реализовать все меторды, чтобы бросить NotImplementedError. Это похоже на ваше первое решение в Java, но теперь это интерфейс, а не класс, и дает вам больше гибкости. Надеюсь помочь.

interface MyResultSet : ResultSet {
    fun bar() ...
    fun foo() {
        throw NotImplementedError()
    }
}
Другие вопросы по тегам