2017-11-12 17 views
1

こんにちは、私はkotlinドキュメントを通過して何も見つかりませんでした。私は何をしたいPOP1ます(私が本当に達成するために必要なことは一般的な方法でデータクラスのコピー機能を使用できるようにすることですデータクラスジェネリック型を使用しているkotlin

data class MyData(val pop1:Long,val pop2:String,...) 

fun class MyGenericClass<T : isDataClass>(o : T){ 
    // This is the important part 
    fun useCopy(value : Long) = t.copy(pop1 = value) 
} 

ような一般的なデータクラスでなければなりませんタール、何かを持っています常に)あなたは、その特定の問題のためのインタフェースを使用することを検討すべき事前

+2

クラスに 'pop1'メンバーがない場合はどうなりますか?私の提案は、インターフェイスを定義し、次にあなたの(データ)クラスを継承させることです。 –

+0

私は今、どのようにしているのですか?問題はコピーメソッドのコピー(pop1:Long)がデータクラス1を使用していないことです –

+1

['sealed class'](https: /kotlinlang.org/docs/reference/sealed-classes.html)またはインターフェイスを使用し、名前付き引数を使用してリフレクションを使用してください。ただし、問題を再考するのはおそらく意味があります。これは珍しいユースケースです。 – Moira

答えて

0

おかげで私のデータクラスのメンバーです。実装のデータクラスcopyに委任してください。

data class MyData(val pop1: Long, val pop2: String) : Pop1Data { 
    override fun copy(pop1: Long) { 
     copy(pop1 = pop) 
    } 
} 

interface Pop1Data { 
    fun copy(pop1: Long) 
} 

class MyGenericClass<T : Pop1Data>(private val o: T) { 
    // This is the important part 
    fun useCopy(value: Long) = o.copy(value) 
} 
関連する問題