【Android】Kotlin toString() 不可以随便用

        举个例子:如下的两种 toString() 方法,第一种返回的是 "" 空字符串吗?

        事实并非如此,它返回的是 "null" 

图1 两种toString()方法

这是为什么呢?

这主要是因为 Kotlin 和 Java 不同,Kotlin增加了空值 ? 。因此,第一个是 Any? 的 toString() 扩展方法,第二个调用的是 Any 类的 toString() 成员方法。

可以看一下 Any?.toString() 如果说明的,当对象为 null 时,返回的时 "null" 而不是 "" (空字符串)

图2 Any?.toString()

开发中如果避免或者区分:

辨认:

通过扩展函数辨认。Kotlin 中的 Any 类和类似于 Java 中的 Object 类。因此每一个对象都应该有一个成员方法 toString()。那么只要区分显示的 toString() 是否是扩展函数就可以了,图1 中可以明显看出黄色斜体为扩展函数。

更改:

既然辨认出来了,那么如何更改呢?有两种方法:

第一种:调用一个可空变量的 toString() 方法时,改用这种方式 

var a: Int? = null

val str = a?.toString() ?: ""

第二种:更改扩展函数,可以重写 Any?.toString() 方法

fun Any?.toString():String{ return this?.toString() ?: ""}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java其实不是编译型语言,java编译之后不是计算机可识别的二进制文件,而是一种特殊的class文件,这种文件只...
    Dane_404阅读 495评论 0 0
  • kotlin的类型系统相比Java,引入了一些新特性,它们是提升代码的可读性的基本要素之一,比如对可空类型和只读集...
    程自舟阅读 3,376评论 1 5
  • 到本章为止,kotlin基本的知识点都记录完毕。还有关于一些泛型和反射的知识点后续会更新上来,知识点和内容来自《K...
    Haife阅读 3,500评论 0 6
  • 简介 Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发。Kotlin可以编译成Jav...
    面包石头阅读 5,501评论 0 52
  • 系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正。如果你觉得我的文章对你有用,欢迎关注我,我们一起...
    我爱吃栗子啊阅读 2,033评论 4 9