Android 運(yùn)用@JvmName解決函數(shù)簽名沖突問(wèn)題詳解
Kotlin(JVM) 中定義下面這樣兩個(gè)方函數(shù)時(shí),編譯器會(huì)報(bào)錯(cuò)
fun foo(value: List<String>) {}
fun foo(value: List<Int>) {}Platform declaration clash: The following declarations have the same JVM signature (method(Ljava/util/List;)V):
因?yàn)?Java 的泛型編譯期擦除,所以 JVM 無(wú)法識(shí)別簽名中泛型的區(qū)別,認(rèn)為這兩個(gè)函數(shù)簽名沖突了
此時(shí)有一個(gè)小技巧是使用 @JvmName 規(guī)避這種沖突
@JvmName("fooB")
fun foo(value: List<String>) {}
@JvmName("fooA")
fun foo(value: List<Int>) {}@JvmName 會(huì)制定一個(gè)針對(duì) JVM 的名字, 當(dāng)我們分別指定了不同名字后, JVM 認(rèn)為這是兩個(gè)不同的函數(shù),就不會(huì)報(bào)錯(cuò)了
反編譯成 Java 代碼,相當(dāng)于下面這樣
//Test.kt 是文件名
public final class TestKt {
public static final void fooB(List<String> value) {}
public static final void fooA(List<Integer> value) {}
}需要注意,這在 interface 中使用可能有限制
interface Test {
@JvmName("fooB")
fun foo(value: List<String>) {
}
@JvmName("fooA")
fun foo(value: List<Int>) {
}
}編譯器報(bào)錯(cuò)如下:
@JvmName annotation is not applicable to this declaration
此時(shí)可以如下進(jìn)行規(guī)避
interface Test {
@Suppress("INAPPLICABLE_JVM_NAME")
@JvmName("fooB")
fun foo(value: List<String>) {
}
@Suppress("INAPPLICABLE_JVM_NAME")
@JvmName("fooA")
fun foo(value: List<Int>) {
}
}@JvmName 本來(lái)是為了 Java 與 Kotlin 互操作性而生的注解,但是在 Kotlin 側(cè)單獨(dú)使用,也可以起到規(guī)避一些 JVM 限制的作用。有趣吧~
到此這篇關(guān)于Android 運(yùn)用@JvmName解決函數(shù)簽名沖突問(wèn)題詳解的文章就介紹到這了,更多相關(guān)Android @JvmName內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android開(kāi)發(fā)簽名知識(shí)梳理總結(jié)
- Android studio導(dǎo)出APP測(cè)試包和構(gòu)建正式簽名包
- Android Studio簽名打包的兩種方式(圖文教程)
- Android實(shí)現(xiàn)簽名涂鴉手寫(xiě)板
- Android 自定義View手寫(xiě)簽名并保存圖片功能
- Android studio設(shè)置指定的簽名文件教程
- Android 項(xiàng)目正式簽名打包教程分享
- Android系統(tǒng)制作自定義簽名的例子
- 使用Android Studio實(shí)現(xiàn)為系統(tǒng)級(jí)的app簽名
相關(guān)文章
Android提高之多級(jí)樹(shù)形菜單的實(shí)現(xiàn)方法
這篇文章主要介紹了Android多級(jí)樹(shù)形菜單的實(shí)現(xiàn)方法,很實(shí)用的功能,需要的朋友可以參考下2014-08-08
5種方法完美解決android軟鍵盤(pán)擋住輸入框方法詳解
我們?cè)陂_(kāi)發(fā)android APP中經(jīng)常會(huì)遇到鍵盤(pán)擋住輸入框的情況,必須先把鍵盤(pán)收起,再去獲取下面輸入框焦點(diǎn),這樣用戶體驗(yàn)也非常不好,今天就給大家介紹5種完美解決android鍵盤(pán)擋住輸入框的方法2018-03-03
Android中使用imageviewswitcher 實(shí)現(xiàn)圖片切換輪播導(dǎo)航的方法
ImageSwitcher是Android中控制圖片展示效果的一個(gè)控件。本文給大家介紹Android中使用imageviewswitcher 實(shí)現(xiàn)圖片切換輪播導(dǎo)航的方法,需要的朋友參考下吧2016-12-12
詳解關(guān)于MIUI 9沉浸式狀態(tài)欄的最新適配
由于各系統(tǒng)版本的限制,沉浸式狀態(tài)欄對(duì)系統(tǒng)有要求,本篇文章主要介紹了詳解關(guān)于MIUI 9沉浸式狀態(tài)欄的最新適配,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-05-05
詳解Android運(yùn)行時(shí)權(quán)限及APP適配方法
本篇文章給大家詳細(xì)分析了Android運(yùn)行時(shí)權(quán)限及APP適配方法,并把重要知識(shí)點(diǎn)做了說(shuō)明,有需要的朋友參考下。2018-03-03
Android開(kāi)發(fā)基于ViewPager+GridView實(shí)現(xiàn)仿大眾點(diǎn)評(píng)橫向滑動(dòng)功能
這篇文章主要介紹了Android開(kāi)發(fā)基于ViewPager+GridView實(shí)現(xiàn)仿大眾點(diǎn)評(píng)橫向滑動(dòng)功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
Android 退出應(yīng)用程序的實(shí)現(xiàn)方法
這篇文章主要介紹了Android 退出應(yīng)用程序的實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2017-04-04
android源碼探索之定制android關(guān)機(jī)界面的方法
這篇文章主要介紹了android源碼探索之定制android關(guān)機(jī)界面的方法,較為詳細(xì)的分析了Android關(guān)機(jī)界面的相關(guān)原理與代碼實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10

