我在Kotlin中做了一个泛型函数,我想在其中实例化一个泛型类型。
interface TickerEntity{
val tickers: Array<String>
val fee: Double
val bid : Double
val ask : Double
}
inline fun < reified T : TickerEntity> getStockBuySell() {
val tickerEntity:Class<T> = T::class.java
}
TickerEntity 是一个接口。我打算实例化实现它的类
上面的函数是可以正常工作的,但是我无法访问每个类元素。似乎也没有一个构造函数被启动。
我的问题:如何在上面的示例中正确实例化接口?我想访问每个班级元素。
答案 0 :(得分:2)
要创建它的实例,可以在Java类上调用newInstance()
,只要它具有零参数构造函数即可:
inline fun < reified T : TickerEntity> getStockBuySell() {
val tickerEntity : T = T::class.java.newInstance()
// ...
}
如果该类没有零参数构造函数,则此操作将失败。
您可以考虑将构造函数作为函数的参数。
fun <T : TickerEntity> getStockBuySell(entityConstructor: () -> T) {
val tickerEntity : T = entityConstructor()
// ...
}
// Usage:
getStockBuySell(::MyTickerEntityImplementationClass)
上面的用法仍然需要零参数构造函数,但是如果您有一些需要参数的特殊实现,则可以通过lambda传递它们:
getStockBuySell { MyTickerEntityImplementationClass("someConstructorArgument") }