为什么我无法访问通用类型类元素?

时间:2020-04-20 00:12:16

标签: java generics kotlin types interface

我在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 是一个接口。我打算实例化实现它的类

上面的函数是可以正常工作的,但是我无法访问每个类元素。似乎也没有一个构造函数被启动。

我的问题:如何在上面的示例中正确实例化接口?我想访问每个班级元素。

1 个答案:

答案 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") }
相关问题