Kotlin - 方法重载与默认参数
发布日期:2021-06-30 18:37:54
浏览次数:2
分类:技术文章
本文共 1435 字,大约阅读时间需要 4 分钟。
方法重载(Overloads)
当一个类中有两个或多个具有相同方法名和不同的参数类型的方法时,就是重载:
class Person { fun say() { println("hahaha") } fun say(what: String) { println(what) } fun say(obj: Any) { println("this is ${ obj.javaClass.simpleName}") }}fun main() { val person = Person() person.say() // hahaha person.say("hehehe") // hehehe person.say(person) // this is Person}
方法签名由方法名和参数类型决定,与方法的其他属性无关。
默认参数
在 Kotlin 中,方法可以使用默认参数,一般情况下,方法重载可以转换成带默认参数的方法:
class Person { fun say(what: String = "hahaha") { println(what) } fun say(obj: Any) { println("this is ${ obj.javaClass.simpleName}") }}fun main() { val person = Person() person.say() // hahaha person.say("hehehe") // hehehe person.say(person) // this is Person}
可以看到这里只是把 say()
和 say(what:String)
使用默认参数整合了,但 say(obj:Any)
还在,其实 say(obj:Any)
的设计是不合理的,因为 String 是 Any 的子类,在调用方法时会有歧义,开发中,最好避免这种写法。
JvmOverloads
现在 Person 类中的 say()是重载方法,而且其中一个 say 有默认参数,我们来看看在 Java 中调用如何:
可以发现,Java 中识别不到不带参数的 say()方法,这是因为 Java 并不知道 Kotlin 中有默认参数这种特性,它只能认为 say(what:String)
和 say(obj:Any)
是重载方法,把 say(what:String)
中的默认参数给忽略了,Kotlin 提供了 @JvmOverloads
可以将带有默认参数的方法转换成对应的重载方法:
class Person { @JvmOverloads fun say(what: String = "hahaha") { println(what) } fun say(obj: Any) { println("this is ${ obj.javaClass.simpleName}") }}
ok,这下 Java 中就识别到了不带参数的 say()方法了
转载地址:https://linqiarui.blog.csdn.net/article/details/113447698 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月29日 23时24分39秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
基于JAVA_JSP电子书下载系统
2019-04-30
基于java出租车计价器设计与实现
2019-04-30
基于java的B2C的网上拍卖系统
2019-04-30
十二时辰篇:这该死的 996
2019-04-30
2021最新 上海互联网公司排名
2019-04-30
字节vs快手!取消大小周之战
2019-04-30
送一个闲置显示器!
2019-04-30
Oracle 行转列 pivot函数基本用法
2019-04-30
Oracle字符串分隔符替换(替换奇数个或偶数个)
2019-04-30
Oracle 利用 UTL_SMTP 包发送邮件
2019-04-30
Oracle 自定义函数实现split功能,支持超长字符串和clob类型的分隔
2019-04-30
Oracle 的循环中的异常捕捉和处理
2019-04-30
Oracle通过pivot和unpivot配合实现行列转换
2019-04-30
给Oracle数据库换一个1522端口的监听
2019-04-30
Excel表格数据生成ECharts图表
2019-04-30
阿里云短信服务python版,pyinstaller打包运行时缺少文件
2019-04-30
Oracle的pfile和spfile的一点理解和笔记
2019-04-30
WebService的简单案例记录(Java)
2019-04-30
Html利用PHP与MySQL交互
2019-04-30