0

データを json にシリアル化することによって、データベース内のデータのストレージを定義するインターフェースがあるとしましょう。

interface StorageApi {
    suspend fun store(key: String, value: Any)
    // inline suspend fun <reified T: Any> get(key: String): T // reification is not possible in interfaces since we can't inline them
    suspend fun <T: Any> get(key: String, kClass: KClass<T>): T // so I have to stick with some other way, like reflection.
}

そして、メソッドの実装があります:

override suspend fun <T : Any> get(key: String, kClass: KClass<T>): T {
    val value = // some query to database
    return Klaxon().parse<T>(value) // obviously error by compiler since T goes through type-erasure
}

ここでは、実行時に Type-erasure を通過するため、T を使用できません。私は反射を持っていますが、この目的でそれを使用する方法がわかりません。このKlaxon.parse()関数は、型を取得するために KClass を受け入れません。

これらをバイパスする方法や、この目的でリフレクションを使用するためのユーティリティを作成する方法、またはその他の可能な回避策はありますか?

4

1 に答える 1