Kotlinとジェネリッククラスにゲッター(またはメソッドやプロパティ)のリストを取得します

Leviand:

私は私がkotlinにジェネリック医薬品を扱うべきかを見つけ出すことはできません。

その後、私は新しいオブジェクト値で古いオブジェクトの値を比較だろう、と私は違いを見つけた場合、I'LL:私は、パラメータとして、クラスの任意の型を取得する必要がありますされ、汎用オブジェクトに加えられた変更の履歴クラスを書いています私のデータクラスでのことを書きます。

私が使用してJavaでそれを行うsuccedeedましたbean.getClass().getMethods();が、私はKotlinへの移行をしようとしたいです。

class ChangeHistoryUtils<T> (val originalBean : T, username : String , var modifiedBean: T? = null) {

    data class ChangeHistory(val username: String, val fieldName : String,
                    val oldValue : String , val newValue : String , val date : LocalDate = LocalDate.now())

    fun compareBeans(){
        //how to get all originalBean getters and its values?
    }
}

私は実際にここにこだわって:私の中のすべてのゲッターを取得する方法をTオブジェクト?

レッツは、私が10のゲッターで、私はすべてのこれらの10のゲッターを呼び出したいクラスを受けますねoriginalBean、と中のもので、その値を比較しますmodifiedBean異なる場合は、私は自分でそれを書きますChangeHistory

感謝

ローランド:

あなたは、ことを確認する必要がありT、それ自体がNULL可能タイプ、などのすなわち使用ものではありませんwhere T : Any例えば、クラス宣言で:

class ChangeHistoryUtils<T> (originalBean : T, username : String , modifiedBean: T? = null) where T : Any

あなたがそれを行う場合は、Javaで行ったように、あなたはその後、単にメソッドにアクセスすることができ、例えば、あなたはちょうどあなたが既に持っているコードを再利用する場合:

fun compareBeans(){
  originalBean::class.java.methods // this is actually your originalBean.getClass().getMethods() !
                   // just print the methods for now...
                            .forEach(::println)
}

あなたはKotlinを使用しているとして、しかし、あなたはむしろ、例えば、単に性質を示す、または類似し、Kotlinのアプローチを使用することもできます。

originalBean::class.memberProperties
             // again just printing them:
                       .forEach(::println)

その後、追加する必要がkotlin-reflect依存関係として。また、確認したいことがあり反射に関するKotlinの参照を

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=206031&siteId=1