【问题标题】:Why I don't have access to generic type class elements?为什么我无法访问泛型类型类元素?
【发布时间】:2020-08-02 10:00:37
【问题描述】:

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

上面的功能有点工作,但我无权访问每个类元素。似乎也没有启动它们的构造函数。

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

【问题讨论】:

    标签: java generics kotlin types interface


    【解决方案1】:

    要创建它的实例,您可以在 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") }
    

    【讨论】:

      猜你喜欢
      • 2019-10-20
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      相关资源
      最近更新 更多