簡體   English   中英

為什么我無法訪問通用類型 class 元素?

[英]Why I don't have access to generic type class elements?

我在 Kotlin 中制作了一個通用的 function ,我想在其中實例化一個泛型類型。

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是一個接口。 我打算實例化實現它的類

上面的 Function 有點工作,但我無法訪問每個 class 元素。 似乎也沒有啟動它們的構造函數。

我的問題:如何在上面的示例中正確實例化一個接口? 我想訪問每個 class 元素。

要創建它的實例,您可以在 Java class 上調用newInstance() ,前提是它具有零參數構造函數:

inline fun < reified T : TickerEntity> getStockBuySell() {
    val tickerEntity : T = T::class.java.newInstance()
    // ...
}

如果 class 沒有零參數構造函數,這將失敗。

您可以考慮將構造函數作為 function 的參數。

fun <T : TickerEntity> getStockBuySell(entityConstructor: () -> T) {
    val tickerEntity : T = entityConstructor()
    // ...
}

// Usage:
getStockBuySell(::MyTickerEntityImplementationClass)

上面的用法仍然需要一個零參數的構造函數,但是如果你有一些特殊的實現需要 arguments,你可以通過 lambda 傳遞它們:

getStockBuySell { MyTickerEntityImplementationClass("someConstructorArgument") }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM