返回顶部
首页 > 资讯 > 移动开发 >Android运用@JvmName解决函数签名冲突问题详解
  • 186
分享到

Android运用@JvmName解决函数签名冲突问题详解

2024-04-02 19:04:59 186人浏览 泡泡鱼
摘要

Kotlin(JVM) 中定义下面这样两个方函数时,编译器会报错 fun foo(value: List<String>) {} fun foo(value: List&

Kotlin(JVM) 中定义下面这样两个方函数时,编译器会报错

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):

因为 Java 的泛型编译期擦除,所以 JVM 无法识别签名中泛型的区别,认为这两个函数签名冲突了

此时有一个小技巧是使用 @JvmName 规避这种冲突

@JvmName("fooB")
fun foo(value: List<String>) {}
@JvmName("fooA")
fun foo(value: List<Int>) {}

@JvmName 会制定一个针对 JVM 的名字, 当我们分别指定了不同名字后, JVM 认为这是两个不同的函数,就不会报错了

反编译成 Java 代码,相当于下面这样

//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>) {
    }
}

编译器报错如下:

@JvmName annotation is not applicable to this declaration

此时可以如下进行规避

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 本来是为了 Java 与 Kotlin 互操作性而生的注解,但是在 Kotlin 侧单独使用,也可以起到规避一些 JVM 限制的作用。有趣吧~

到此这篇关于Android 运用@JvmName解决函数签名冲突问题详解的文章就介绍到这了,更多相关Android @JvmName内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Android运用@JvmName解决函数签名冲突问题详解

本文链接: https://lsjlt.com/news/165017.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android运用@JvmName解决函数签名冲突问题详解
    Kotlin(JVM) 中定义下面这样两个方函数时,编译器会报错 fun foo(value: List<String>) {} fun foo(value: List&...
    99+
    2024-04-02
  • jQuery命名冲突问题怎么解决
    这篇文章主要介绍“jQuery命名冲突问题怎么解决”,在日常操作中,相信很多人在jQuery命名冲突问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jQuery命名...
    99+
    2024-04-02
  • Android滑动冲突问题的解决方法
    叙述 滑动冲突可以说是日常开发中比较常见的一类问题,也是比较让人头疼的一类问题,尤其是在使用第三方框架的时候,两个原本完美的控件,组合在一起之后,忽然发现整个世界都不好了。 ...
    99+
    2022-06-06
    方法 Android
  • linux 下同名符号冲突问题解决方案
    linux 下同名符号冲突问题解决方案 最近的工作中遇到如下令人蛋疼的问题: Linux 下有三个模块aa、bb、cc,基本情况如下: cc 编译连接得到 cc.so 动态库,cc 中有如下接口: cc...
    99+
    2022-06-04
    符号 冲突 解决方案
  • Android使用NestedScrollView 内嵌RecycleView滑动冲突问题解决
    目录场景描述实现思路问题和优化优化场景描述 使用NestedScrollView 内嵌RecycleView时,当用户上滑时,NestedScrollView需要首先响应上滑事件,直...
    99+
    2024-04-02
  • Android 中ScrollView与ListView冲突问题的解决办法
    Android 中ScrollView与ListView冲突问题的解决办法自定义MyListViewpublic class MyListView extends ListView { public MyListView(Context...
    99+
    2023-05-30
    android scrollview listview
  • Android使用NestedScrollView内嵌RecycleView滑动冲突问题如何解决
    这篇“Android使用NestedScrollView内嵌RecycleView滑动冲突问题如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,...
    99+
    2023-07-02
  • Android事件冲突怎么解决悬浮窗拖拽问题
    本文小编为大家详细介绍“Android事件冲突怎么解决悬浮窗拖拽问题”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android事件冲突怎么解决悬浮窗拖拽问题”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。需求场...
    99+
    2023-07-05
  • 如何解决Android Libgdx中ScrollPane和Actor事件冲突问题
    小编给大家分享一下如何解决Android Libgdx中ScrollPane和Actor事件冲突问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在Libgdx的...
    99+
    2023-05-30
    android libgdx
  • Mybatis中怎么利用mapper解决ID冲突问题
    这篇文章给大家介绍Mybatis中怎么利用mapper解决ID冲突问题,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。mapper 的id冲突原因:原因一:在同一个mapper.xml中存在相同的ID原因二:同时使用了x...
    99+
    2023-06-15
  • node.js降低版本的方式详解(解决sass和node.js冲突问题)
    目录一、概述二、降低node.js版本(一)卸载清除原版本 (二)下载指定的版本与配置(三) 版本更改成功一、概述 在使用vue的时候,会遇到项目的依赖(package.j...
    99+
    2023-02-22
    node.js降低版本 sass和node.js冲突
  • sqlserver数据库最大Id冲突问题的解决方法
    本篇内容主要讲解“sqlserver数据库最大Id冲突问题的解决方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sqlserver数据库最大Id冲突问题的解决...
    99+
    2024-04-02
  • Android App中ViewPager所带来的滑动冲突问题解决方法
    叙述 滑动冲突可以说是日常开发中比较常见的一类问题,也是比较让人头疼的一类问题,尤其是在使用第三方框架的时候,两个原本完美的控件,组合在一起之后,忽然发现整个世界都不好了。 关...
    99+
    2022-06-06
    方法 viewpager app Android
  • Android 解决游戏发行切包资源索引冲突的问题
    目录背景1、public.xml介绍1、public.xml这个文件是哪来的?2、public.xml有什么作用3、public.xml中的id的格式2、R类介绍R类和public....
    99+
    2024-04-02
  • 详解Java 加密解密和数字签名问题
    在做项目中,只要涉及敏感信息,或者对安全有一定要求的场景,都需要对数据进行加密。在Java中原生API即可实现对称加密与非对称加密,并支持常用的加密算法。 对称加密 对称加密使用单钥...
    99+
    2024-04-02
  • 解决Spring JPA 使用@transaction注解时产生CGLIB代理冲突问题
    Spring JPA 使用@transaction注解时产生CGLIB代理冲突 在使用JPA进行数据库的删除操作时需要使用@Transactional注解来支持事物: @Mod...
    99+
    2024-04-02
  • Gitlab如何用vscode工具快速解决代码冲突问题
    本篇内容主要讲解“Gitlab如何用vscode工具快速解决代码冲突问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Gitlab如何用vscode工具快速解决代码冲突问题”吧!首先我们来看看冲...
    99+
    2023-07-05
  • Android如何解决游戏发行切包资源索引冲突的问题
    本篇内容介绍了“Android如何解决游戏发行切包资源索引冲突的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!背景游戏发行切包过程中,经...
    99+
    2023-06-14
  • 如何解决Spring JPA 使用@transaction注解时产生CGLIB代理冲突问题
    本篇内容介绍了“如何解决Spring JPA 使用@transaction注解时产生CGLIB代理冲突问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能...
    99+
    2023-06-20
  • 如何解决Android 沉浸式状态栏和华为虚拟按键冲突问题
    这篇文章主要介绍如何解决Android 沉浸式状态栏和华为虚拟按键冲突问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!先看下实现的效果图:这是我自己的手机,OnePlus 3T 7.1.1版本(免费广告,没给我钱的...
    99+
    2023-05-30
    android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作