2017-10-18 18 views
3

これは私がKotlinにクラスの委任を作成する方法を知っている:Kotlinクラスの委任機能

class CustomList<T>(private val data: ArrayList<T> = ArrayList<T>()) : List<T> by data 

私はときCustomListリストが空になりたいので、しかし、私は、コンストラクタでデータを入れたくありません

class CustomList<T> : List<T> by data { 
    private val data = ArrayList<T>() 
} 

これは機能していないようです。

にはどうすればdataインナーフィールドにし、また、すべての委譲メソッドを記述することなく、それのメ​​ソッドにリストを委任することができますか?

答えて

4

Class Delegationは、プライマリコンストラクタのパラメータのために、現在のみ可能です。

回避策:プライベートのプライマリコンストラクタを宣言し、それにその代表者のパブリックコンストラクタを提供します。

class CustomList<T> private constructor(private val data: List<T>) : List<T> by data { 
    constructor() : this(ArrayList()) 
} 
+0

'ArrayList()'の代わりに 'listOf()'を使用してください。 'ArrayList'を指定する必要はありません。一般に – Joshua

+0

@Joshuaは、あなたは正しいが、OPの元のコードは 'ArrayListを()'インスタンス化します。 –