Kotlin VS Scala: реализовать методы с параметрами первичного конструктора

В Scala вы можете написать такой код.

trait List[T] { def isEmpty() :Boolean def head() : T def tail() : List[T] } class Cons[T](val head: T, val tail: List[T]) :List[T] { def isEmpty = false } 

вам не нужно переопределять хвост и голову, они уже определены, но в Котлин мне пришлось это кодировать.

 interface List<T> { fun isEmpty() :Boolean fun head() : T fun tail() : List<T> } class Cons<T>(val head: T, val tail: List<T>) :List<T> { override fun isEmpty() = false override fun head() = head override fun tail() = tail } 

Мой вопрос: «Это лучший способ написать мой код Котлина?»

Вы можете создавать свойства head и tail :

 interface List<T> { val head: T val tail: List<T> fun isEmpty(): Boolean } class Cons<T>(override val head: T, override val tail: List<T>) : List<T> { override fun isEmpty() = false }