[英]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.