日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kotlin的Reified类型:怎样在函数内使用这一类型(KAD 14)

發布時間:2025/4/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kotlin的Reified类型:怎样在函数内使用这一类型(KAD 14) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:Antonio Leiva

時間:Mar 2, 2017

原文鏈接:https://antonioleiva.com/reified-types-kotlin/

?

對于Java開發者來說,最懊惱的限制之一是,在用泛型時不能夠直接地使用類型。

?

通常解決方法是以函數參數形式傳遞類,這使得代碼更復雜且缺乏吸引力。

?

Kotlin中,多虧有了inline函數(我們已經討論),我們可以用reified類型使我們能夠在函數內使用它們。

?

為什么會如此?你會明白的,你會喜歡它的。

?

Reified 類型

?

如我早前的論述,以reified修飾類型后,我們就能夠在函數內部使用相關類型了

?

重要的是,使用內聯函數后,在其運行地方需要替換代碼來獲得類型。事實上由于Java虛擬機的限制,類型不能使用,而是跳過限制的“詭計”。

?

引導到一個活動(Activity

?

這是最典型的Android應用案例。

?

Java中,我們調用startActivity時,我們需要以參數形式指明目的類。

?

Kotlin中,我們能夠通過添加類型傳遞給函數來簡化這個操作:

1 inline fun <reified T : Activity> Activity.startActivity() { 2 startActivity(Intent(this, T::class.java)) 3 }

?

現在,引導一個Activity就可以如此簡單:

1 startActivity<DetailActivity>()

?

FindView類型轉換

?

部分Android開發人員使用Java十分有益的方式是用泛型通過變量賦值結果返回對象類型。

?

Java中,你可以產生這樣的一個函數:

1 public <T extends View> T findView(Activity activity, int id) { 2 return (T) activity.findViewById(id); 3 }

?

然后用它返回對象類型:

1 TextView textView = Utils.findView(activity, R.id.welcomeMessage);

?

Kotlin中,做法有些類似,但是由于有了擴展函數就更加容易:

1 fun <T : View> Activity.findView(id: Int) = findViewById(id) as T 2 3 val textView = activity.findView<TextView>(R.id.welcomeMessage)

?

但是,你會發現這種情況,由于沒有訪問T類型,編譯器都不能確定有效類型,所以編譯器會給出警告。

?

用了reified類型,就可以避免這種情況:

1 inline fun <reified T : View> Activity.findView(id: Int) = findViewById(id) as T

?

結論

?

?

reified類型,你能夠做一些在Java中不可能實現的事情,甚至可以做一些更安全的函數。

?

現在,你可以避免將類的類型作為自變量傳遞給你的函數了。

?

此外,由于有了擴展函數,你能夠在框架(如Android)上創建新函數了。在Android的API中有些部分已經使用這個方法(如startActivity方法)。

?

如果你要開始用Kotlin開發你自己的APP,我建議你閱讀免費指南Android開發Kotlin

?

轉載于:https://www.cnblogs.com/figozhg/p/6501415.html

總結

以上是生活随笔為你收集整理的Kotlin的Reified类型:怎样在函数内使用这一类型(KAD 14)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。