2017-02-25 10 views
0

具体的なタイプUserではなく、タイプパラメータTを指定できるように、以下のコードを汎用クラスに変換するにはどうすればよいですか?Kotlinを汎用クラスに変換する

class UserService : BaseService { 
    val query = datastore.createQuery(User::class.java) 
} 

答えて

2

@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>()

0
class Service<T>(val type: Class<T>) { 

     val query: Object 

     init { 
      //init query 
     } 

} 
関連する問題