java调用kotlin的扩展方法、扩展属性、扩展函数_java调用kotlin扩展方法-程序员宅基地

技术标签: kotlin教程  kotlin基础  java调用kotlin扩展  java和kotlin相互调用  kotlin技巧  

kotlin的扩展方法,其实是以java的静态方法形式存在的,也就是说如果要用java调用kotlin的扩展方法,和调用静态函数一样

调用扩展属性也是相同的道理

举个例子,我们在某个kotlin文件(文件名为Utils.kt)里为Throwable写一个根据错误类型返回错误消息的扩展方法:

fun Throwable.getShowMsg1() = when(this){
        is HttpException ->"${
        when(code()){
            401 -> "文件未授权或证书错误"
            403 -> "服务器拒绝请求"
            404 -> "服务器找不到请求的文件"
            408 -> "请求超时,服务器未响应"
            500 -> "服务器内部错误)服务器遇到错误,无法完成请求。"
            502 -> "服务器从上游服务器收到无效响应。"
            503 -> "服务器目前无法使用"
            504 -> "服务器从上游服务器获取数据超时"
            else -> "服务器错误"
        }
        },错误码:${code()}"
        is ParseException -> "json格式错误"
        is JSONException -> "json解析错误"
        is JsonParseException -> "json参数错误"
        is SSLHandshakeException -> "证书验证失败"
        is SocketTimeoutException -> "连接超时"
        is UnknownHostException -> "网络链接失败"
        is ErrnoException -> "网络不可访问"
        is OnErrorNotImplementedException -> cause?.showMsg?:message?:"未知错误"
        else -> message?:"未知错误"
    }

在kotlin里可以直接调用:

fun printError(t:Throwable){
    println(t.getShowMsg1())
}

在java里,会被编译成静态方法,调用时以静态方法的方式调用:

    public void printError(Throwable t){
        //java调用kotlin扩展方法:
        //文件名.扩展名(扩展类),例如:UtilsKt.getShowMsg1(t)
        //注意,扩展方法写在Utils.kt文件里,因此类名应该是:UtilsKt
        //以下写法与上面kotlin的写法等价
        System.out.println(UtilsKt.getShowMsg1(t));
    }

 

扩展属性的调用与扩展方法类似,依然以返回错误类型的错误消息为例:

为Throwable写一个showMsg的扩展属性:

val Throwable.showMsg:String get() = when(this){
    is HttpException ->"${
    when(code()){
        401 -> "文件未授权或证书错误"
        403 -> "服务器拒绝请求"
        404 -> "服务器找不到请求的文件"
        408 -> "请求超时,服务器未响应"
        500 -> "服务器内部错误)服务器遇到错误,无法完成请求。"
        502 -> "服务器从上游服务器收到无效响应。"
        503 -> "服务器目前无法使用"
        504 -> "服务器从上游服务器获取数据超时"
        else -> "服务器错误"
    }
    },错误码:${code()}"
    is ParseException -> "数据格式错误,请稍后重试"//后台返回的json格式有误,导致解析失败
    is JSONException -> "发送的数据不正确,请稍后重试"//前端发送给后台的json格式有误
    is JsonParseException -> "json参数异常导致解析失败" //后台返回的json格式有误,Gson解析失败
    is SSLHandshakeException -> "证书验证失败"
    is SocketTimeoutException -> "连接超时,请稍后重试"
    is TimeoutException -> "连接超时,服务器未在设定时间内回应,请稍后重试"
    is UnknownHostException -> "网络链接失败"
    is ErrnoException -> "网络不可访问"
    is OnErrorNotImplementedException -> cause?.showMsg?:message?:"未知错误"
    else -> message?:"未知错误"
}

在kotlin里调用该扩展属性:

fun printError(t:Throwable){
    println(t.showMsg)
}

在java里调用

    public void printError(Throwable t){
        //kotlin的扩展属性,编译时同样会改成静态方法,
        // 调用方式与调用扩展方法类似
        System.out.println(UtilsKt.getShowMsg(t));
    }

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jingzz1/article/details/106093939

智能推荐

按照这些知识点依次去复习java知识点,祝你稳过大厂面试(面试java程序员需要掌握哪些知识点)_找工作java复习-程序员宅基地

文章浏览阅读1k次。主要原因呢还是太卷,同样是 CURD 的活,谁更熟练要谁,比如下面这些面试题,八股文越熟练越容易通过 Java 面试。目录一、Java基础二、Java IO三、Java虚拟机四、Linux五、Mybatis六、MySQL七、Redis八、Spring九、Spring BootTHANKS FOR WATCHING!一、Java基础1.JDK动态代理和CGLIB动态代理的区别2.静态代理和动态代理的区别3.ArrayList和LinkedList有什么区别?4.重写和重载的区别5.Java 8的_找工作java复习

小样本学习综述||阿里巴巴_小样本学习 图像分类 阿里-程序员宅基地

文章浏览阅读948次。元学习论文总结||小样本学习论文总结2017-2019年计算机视觉顶会文章收录 AAAI2017-2019 CVPR2017-2019 ECCV2018 ICCV2017-2019 ICLR2017-2019 NIPS2017-2019https://baijiahao.baidu.com/s?id=1629626559555746572&wfr=spider&..._小样本学习 图像分类 阿里

centos7源码方式安装zabbix-4.0_centos7从源代码安装zabbix4.0-程序员宅基地

文章浏览阅读1.3k次。1.关闭防火墙systemctl stop firewalld.service #临时关闭firewallsystemctl disable firewalld.service #禁止firewall开机启动2.替换yum源mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backupwg..._centos7从源代码安装zabbix4.0

Hbase安装及配置_hbase配置步骤-程序员宅基地

文章浏览阅读8.6k次,点赞11次,收藏82次。实验目的:(1)熟悉Hadoop相关操作。(2)掌握虚拟机上Hbase的安装方法并可以熟练安装Hbase。实验要求:(1)根据Hadoop版本安装合适的Hbase。(2)安装好hbase后进入hbase熟悉数据库相关操作。(1)在官网下载Hadoop对应的Hbase的版本,下载完成之后,进行解压,并将其解压之后的结果传输到虚拟机内/opt/modules文件夹下。这些截图是我第一次装的时候的版本,建议大家换成高一些的版本,这个版本有点低了。其中,把hbase-重命名为hbase,方便后续._hbase配置步骤

springBoot集成redisCluster-程序员宅基地

文章浏览阅读94次。本文主要内容:springBoot简介,在SpringBoot中如何集成Redis,可配置Redis集群。关于SpringBoot你想要的,这里都有:https://spring.io/projects/spring-boot 这是SpringBoot的官方文档,开发者已经将你需要的东西都给你了。SpringBoot是一个大的容器,可以在这里很轻松地创建各种Spring应用,并且轻..._springboot 2.0.5 release redis cluser

Transformer新型神经网络在机器翻译中的应用 | 公开课笔记-程序员宅基地

文章浏览阅读2.1k次。嘉宾 | 于恒来源 | AI科技大本营在线公开课编辑 | Jane于恒:直播间的朋友大家好!欢迎大家来到本次AI科技大本营公开课,我是本次讲师于恒。在讲课开始之前先简短..._transformer 多卡

随便推点

JProfiler远程监控Linux JVM-程序员宅基地

文章浏览阅读526次。转自:https://www.cnblogs.com/beginner-boy/p/8072926.html第一步:下载软件官网地址:https://www.ej-technologies.com/download/jprofiler/files,下载一个linux服务端,一个windows客户端 GUI界面第二步:安装1、下载好后把tar包上传的linux服务器,解压。(/us..._jprofiler远程监控linux

GooglePlay内购In-app Billing 总结_google 重复内购-程序员宅基地

文章浏览阅读3.3k次。GooglePlay内购In-app Billing 总结GooglePlay支付的接入可以参考SDKgoogleapi的例子(sdk/google/play_billing/samples/TrivialDrive)商品的说明:Google Play 没有可重复购买商品这个概念,所有的“商品/充值档”用户成功购买过一次之后就不允许再次购买了。所以为了实现像应用内支付充值这种可重复购买_google 重复内购

springboot【19】日志管理之使用AOP统一处理Web请求日志-程序员宅基地

文章浏览阅读3.4k次。AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是Spring框架中的一个重要内容,它通过对既有程序定义一个切入点,然后在其前后切入不同的执行内容,比如常见的有:打开数据库连接/关闭数据库连接、打开事务/关闭事务、记录日志等。基于AOP不会破坏原来程序逻辑,因此它可以很好的对业务逻辑的各

Python——列表排序和赋值_python 列表赋值-程序员宅基地

文章浏览阅读4.4k次,点赞2次,收藏4次。(x, y表达式) for x in 列表1 for y in 列表2 if 条件表达式]根据可迭代对象参数iterable,返回一个新的排序后的列表。[x表达式for x in 列表if 条件表达式][x表达式for x in 列表if 条件表达式][x表达式for x in 列表if 条件表达式][x表达式for x in 列表if 条件表达式]返回一个将序列seq中的元素顺序反转的迭代器对象。根据一个列表中的每个元素通过某种运算或筛选得到另。不比较元素大小,直接将列表ls中的元素逆序。_python 列表赋值

Codeforces990 E. Post Lamps(复杂度分析)-程序员宅基地

文章浏览阅读121次。题意:解法:暴力跳的复杂度是O(n/1+n/2+....)=O(n*log).但是有m个位置被禁止了,每次遇到被禁止的位置,我们需要回退到左边第一个未被禁止的位置,然后放路灯,回退造成的额外复杂度大概是O(m/1+m/2....)=O(m*log)?总复杂度在可接受范围内.code:#include<bits/stdc++.h>#define int long longusing namespace std;const int maxm=2e6+5;int mark_e. post lamps

python3怎么调用百度搜索推广API,最新能成功的方法_百度api高级搜索-程序员宅基地

文章浏览阅读914次。最近需要用到百度竞价后台的关键词规划师,后台虽然也能查,但是只能单次查1000个,有时候有很大量词需要查的时候就感觉工作量那个巨大。。所以为了以后工作方便,想做一个工具,方便使用。查看百度营销api官方文档,找到你需要的api,例如我需要查的关键词规划师就是在辅助里面,当然你也可以用postman测试。这些调试工具测试通了以后就开始转成python吧,特别推荐postman里面可以直接把内容转化成代码,但是我就是在这个地方遇到了个大坑,我看别的作者也是用这个转代码的,结果没问题,但是我需要的_百度api高级搜索