Kotlin 关于转换为泛型类

LEM*_*ANE 2 generics kotlin

如何将下面的代码转换为泛型类,以便可以指定类型参数T而不是具体类型User

class UserService : BaseService {  
    val query = datastore.createQuery(User::class.java)
}
Run Code Online (Sandbox Code Playgroud)

Oli*_*ain 5

@Ufkoku 是正确的,但我认为更多的解释可能会有所帮助。

class UserService<T>(val clazz: Class<T>) : BaseService {  
    val query = datastore.createQuery(clazz)
}
Run Code Online (Sandbox Code Playgroud)

请注意,使用 Kotlin 的具体化泛型,您还可以为上面的内容创建一个方便的构造,允许您在不传递Class实例的情况下构造一个构造:

class UserService<T>(val clazz: Class<T>) : BaseService { 
    val query = datastore.createQuery(clazz)

    companion object {
        inline fun <reified T> create() = UserService(T::class.java)
    }
}
Run Code Online (Sandbox Code Playgroud)

那么你可以将它们构造为val s = UserService(String::class.java)或者val s = UserService.create<String>()