Kotlin中的data类–为数据而生,为数据而美

嘎子 Android, Kotlin 2017-05-27 828 次浏览 , 没有评论

我们在写程序时,不可避免的会进行数据的操纵。在进行数据操纵时,我们会专门的编写一些类。如果这些类写的多了,你会发现这些类都有一些比较类似的特点,因为这些特点的存在,Kotlin很人性化的将这些东西总结出来,让程序员可以减少大量的工作。

费话不多说,先看个例子。这个例子在也赶个时髦,说说Kotlin那些事 也用过,为了充分体现Kotlin的优越性,会将Kotlin代码与Java代码进行比较:

先来一个Java代码:

恩,代码不算长,熟练工15分钟的工作量吧。

再看看Kotlin的代码:

恩,也不短,非熟练工2分钟吧。看到差别了吧。这就是Kotlin的魅力。在class之前的data帮你做好所有的工作,主要做的工作有:

1、自动实现equals() / hashCode() 方法
2、自动实现toString() 格式是 “Person(name=John, age=42,height=1.8)”,
3、按声明顺序对应的所有属性,
4、copy() 函数。

有人说上面自动实现的这些方法和自己想实现的不太一样,怎么办?Kotlin里面还有一个特性:

如果这些函数中的任何一个在类体中显式定义或继承自其基类,则不会自动生成该函数。

看到这里,我承认我说错了,上面的Java代码和Kotlin代码并没有实现相同的功能,Kotlin的代码实现的功能比Java代码实现的功能还多。多了一个功能非常强大的copy函数。

copy是怎么实现的呢,怎么用呢,有什么意义呢?也给大家说一下:

在现实生活中经常会出现这种情况,我们要复制一个对象,只改变他的一小部分属性,就像两个双胞胎,他们只有名字不一样,就可以用copy方法。

copy方法大约是这样实现的:

两种用法:

啧啧啧,Java该面红耳赤了吧!!!

下面来给Java补充点信心,Kotlin的数据类也有一点点限制:

1、主构造函数需要至少有一个参数;
2、主构造函数的所有参数需要标记为 val 或 var ;
3、数据类不能是抽象、开放、密封或者内部的;

数据类真是个好东西!

原创文章,转载请注明: 转载自TsonTec:测量解决方案提供者

本文链接地址: Kotlin中的data类–为数据而生,为数据而美

相关主题

说点什么

您将是第一位评论人!

提醒
avatar
wpDiscuz
回顶部