Как преобразовать код ниже в общий класс, чтобы можно было указать параметр типа T
вместо конкретного типа User
?
class UserService : BaseService { val query = datastore.createQuery(User::class.java) }
@Ufkoku верен, но я подумал, что немного больше объяснений может помочь.
class UserService<T>(val clazz: Class<T> : BaseService { val query = datastore.createQuery(clazz) }
Обратите внимание, что с использованием обобщенных генериков 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) } }
Итак, вы можете построить их как val s = UserService(String::class.java)
или val s = UserService.create<String>()
class Service<T>(val type: Class<T>) { val query: Object init { //init query } }