簡體   English   中英

如何制作返回通用 object 的 function?

[英]How to make a function that returns a generic object?

我正在嘗試制作一個返回 T/Any object 的 function。 唯一的問題是我不太確定該怎么做。

 fun readMockData(context: Context, filename: String): Any {
    val json = context.assets.open("$filename.json").bufferedReader().use(BufferedReader::readText)
    return RetrofitSingleton.GSON.fromJson(json, object : TypeToken<Any>() {}.type)
}

這是我最初嘗試的方法,但出現錯誤。 我應該如何正確制作這個 function?

如果我正確理解您的問題,這就是您所需要的:

@OptIn(ExperimentalStdlibApi::class)
inline fun <reified T> readMockData(context: Context, filename: String): T {
    val json = context.assets.open("$filename.json").bufferedReader().use(BufferedReader::readText)
    return RetrofitSingleton.GSON.fromJson(json, typeOf<T>().javaType)
}

請注意,它必須是內聯的,否則無法獲取類型。 如果您的 function 比上面的長,最好將其拆分為內聯 reified 包裝器和接受Type作為參數的主要 function 。

它使用反射,因此您需要為其添加依賴項。 此外, typeOf()是實驗性的,但根據我的經驗,它可以正常工作(至少在 JVM 上)並且它已經存在了很長時間,所以我猜它不會改變。

暫無
暫無

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

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