Kotlin – Это отличный способ бросить NotImplementedError для всех методов класса?

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

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

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

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

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

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

 interface MyResultSet : ResultSet { fun bar() ... fun foo() { throw NotImplementedError() } } 

Оформить стандартную функцию TODO, которая знаменует 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") } 

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