ファーストクラスコレクションにコレクションのメソッドを委譲する
data class Book( val title: String, val price: Int ) data class Books( private val books: List<Book> ) : List<Book> by books // コレクションメソッドをdelegate // List<Book> -> Books fun List<Book>.toValue() = Books( map { Book(it.title, it.price) } ) fun main() { val books = listOf(Book("foo", 1000), Book("bar", 2000)).toValue() println(books.isEmpty()) // -> false println(books.size) // -> 2 println(books[0]) // -> Book(title=foo, price=1000) }
自分でisEmpty() とか書かなくて良くなるので少し楽になります。
ただ、List実装に強く依存してしまい、公開したくないメソッドまで使えたりするので、その点は微妙かも。