具体的なタイプUser
ではなく、タイプパラメータT
を指定できるように、以下のコードを汎用クラスに変換するにはどうすればよいですか?Kotlinを汎用クラスに変換する
class UserService : BaseService {
val query = datastore.createQuery(User::class.java)
}
具体的なタイプUser
ではなく、タイプパラメータT
を指定できるように、以下のコードを汎用クラスに変換するにはどうすればよいですか?Kotlinを汎用クラスに変換する
class UserService : BaseService {
val query = datastore.createQuery(User::class.java)
}
@Ufkokuは正しいですが、私はもう少し説明が役立つかもしれないと思いました。
class UserService<T>(val clazz: Class<T> : BaseService {
val query = datastore.createQuery(clazz)
}
その上で、あなたがClass
インスタンスを渡さずに1を構築することを可能にするためにあなたはまた、利便性を作成することができますKotlinの具体化ジェネリックを使用して構築すること注:
class UserService<T>(val clazz: Class<T> : BaseService {
val query = datastore.createQuery(clazz)
companion object {
inline fun <reified T> create() = UserService(T::class.java)
}
}
それではあなたはどちらかとしてこれらを構築することができますval s = UserService(String::class.java)
またはval s = UserService.create<String>()
class Service<T>(val type: Class<T>) {
val query: Object
init {
//init query
}
}