Kotlin - Есть ли умный способ бросить NotImplementedError для всех методов класса?
Мне нужно реализовать интерфейс (ResultSet
) имея сотни методов. На данный момент я собираюсь реализовать только подмножество этих методов, бросая NotImplementedError
для остальных.
В Java я нашел два решения:
- Создать абстрактный класс
AbstractResultSet
реализацииResultSet
, объявив все методы, чтобы броситьNotImplementedError
, Нет взломов, но много шаблонного кода. - использование
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()
}
}