我正在查看一个包含以下条目的代码:
open class PersonFinder: Finder<Long, Person>(Person::class.java)
open class CompanyFinder: Finder<Long, Company>(Company::class.java)
open class DeviceFinder: Finder<Long, Device>(Device::class.java)
我想要一个更通用的方法,像这样:
open class GenericFinder<T>: Finder<Long, T>(T::class.java)
,但是语法无效,因为T :: class.java不能在那里用作参数。有什么办法可以使我以惯用的方式工作吗?
答案 0 :(得分:0)
我想我找到了解决方法:
open class GenericFinder<T>(type: Class<T>) : Finder<Long, T>(type)
答案 1 :(得分:0)
如果(至少合理地)想要直接使用GenericFinder
而不是对其进行子类化,则可以使用reified
type parameter添加一个辅助函数:
open class GenericFinder<T>(type: Class<T>) : Finder<Long, T>(type) { ... }
inline fun <reified T> GenericFinder() = GenericFinder(T::class.java)