Избегание объявления параметра Unit при реализации универсального интерфейса

#kotlin #syntax

#котлин #синтаксис #kotlin

Вопрос:

У меня есть интерфейс Handler<T> с одним методом handle(item: T) и несколькими классами, реализующими его:

 class FooHandler : Handler<String>
class BarHandler : Handler<Int>
class BazHandler : Handler<Unit>
  

В последнем из них handle реализация выглядит следующим образом:

 override fun handle(nothing: Unit) {
  //whatever
}
  

Я нахожу это довольно уродливым. Было бы здорово, если бы Kotlin позволил избежать объявления параметра, когда он имеет тип Unit , например:

 override fun handle() {
  //whatever
}
  

Но пока это не поддерживается. Есть ли у Kotlin что-то, чтобы справиться с этой ситуацией?

Ответ №1:

Предполагая, что ваш интерфейс выглядит следующим образом:

 interface Handler<T> {
  fun handle(item: T)
}
  

Вы могли бы обернуть это в другой интерфейс, подобный этому:

 interface TypelessHandler : Handler<Unit> {
  fun handle()

  override fun handle(item: Unit) {
    handle()
  }
}
  

Затем используйте его следующим образом:

 class FooHandler: TypelessHandler {
  override fun handle() {
    //whatever
  }
}