• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Kotlin的数据类:节省很多行代码(KAD 10),kotlin很多行

Kotlin的数据类:节省很多行代码(KAD 10),kotlin很多行

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了kotlin,kotlin教程,kotlin android,kotlin语言,kotlin官网等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Kotlin的数据类:节省很多行代码(KAD 10),kotlin很多行


作者:Antonio Leiva

时间:Jan 25, 2017

原文链接:https://antonioleiva.com/data-classes-kotlin/

 

 

在前面的文章中,我们已经见到了类,而数据类还可以进一步帮助我们简化代码。

 

数据类是什么?

 

数据类是仅仅包含状态而没有任何可执行的操作。

 

用数据类替换普通类的好处是Kotlin帮助我们产生大量的代码。

 

特别是,它使我们省去如下工作:

  • 在构造函数中声明属性:这一技术不是数据类特有的,但是除了构造函数外,它避免了所有getter和setter模板。
  • equals() / hashCode()
  • 一组称之为comopinentX(),稍后我们能够了解到它们允许我们所做一些非常棒的事情。
  • Copy()方法在我们使用不可变对象时非常有用。

 

Java代码与数据类如何比较

 

这里给出精彩的比较。尽管IDE能够产生几乎所有的代码,但是在Java中,我们需要这样实现数据类:

 1 public class Person {
 2  
 3     private String name;
 4     private String surname;
 5     private String id;
 6  
 7     public String getName() {
 8         return name;
 9     }
10  
11     public void setName(String name) {
12         this.name = name;
13     }
14  
15     public String getSurname() {
16         return surname;
17     }
18  
19     public void setSurname(String surname) {
20         this.surname = surname;
21     }
22  
23     public String getId() {
24         return id;
25     }
26  
27     public void setId(String id) {
28         this.id = id;
29     }
30  
31     @Override public boolean equals(Object o) {
32         if (this == o) return true;
33         if (o == null || getClass() != o.getClass()) return false;
34  
35         Person person = (Person) o;
36  
37         if (name != null ? !name.equals(person.name) : person.name != null) return false;
38         if (surname != null ? !surname.equals(person.surname) : person.surname != null)
39             return false;
40         return id != null ? id.equals(person.id) : person.id == null;
41  
42     }
43  
44     @Override public int hashCode() {
45         int result = name != null ? name.hashCode() : 0;
46         result = 31 * result + (surname != null ? surname.hashCode() : 0);
47         result = 31 * result + (id != null ? id.hashCode() : 0);
48         return result;
49     }
50  
51     @Override public String toString() {
52         return "Person{" +
53                 "name='" + name + ''' +
54                 ", surname='" + surname + ''' +
55                 ", id='" + id + ''' +
56                 '}';
57     }
58 }

 

并且,我们仍未实现与Kotlin这一行代码相同功能:

1 data class Person(var name: String, var surname: String, var id: String)

 

这里我们实实在在的看到Kotlin的潜力,为我们节省大量无用代码。

 

类重构

 

这是componentX的用法。感谢它们,你能够以这种方法解析数据类中变量:

1 val person = Person("x", "y", "z")
2 val (n, s, i) = person

 

感谢这一切,你能够在循环内解析map键值对:

1 val map = mapOf(1 to "a", 2 to "b")
2  
3 for ((key, value) in map) {
4     toast("key: $key, value: $value")
5 }

 

对象复制

 

如我们前面所谈的,在每一个可能的不变性情况下,它是一个很好的实践。如果我们以不变实现前面类的:

1 data class Person(val name: String, val surname: String, val id: String)

 

现在要改变姓氏,就不能了。

 

当你以不可变方式运行,为了改变对象状态,你就需要复制它到新值。这就要用到copy函数:

1 val person = Person("John", "Smith", "123abc")
2 val person2 = person.copy(surname="Rogers")

 

Copy函数可以尽可能多的得到你需要改变的参数值。如你所见,函数参数可以命名,这样你可以指定你要改变哪一个。

 

结论

 

数据类可以节省大量Java强制我们产生样板代码,这样最终代码更易于理解和便于维护。

 

如果你喜欢这篇文章,你可以得到我的免费指南,继续学习Kotlin,在指南中我展示了如何创建你的第一个Kotlin项目。

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 想要了解Kotlin,看这个就够了,想要Kotlin,
  • 浅谈Kotlin(三):类,浅谈kotlin
  • 浅谈Kotlin(二):基本类型、基本语法、代码风格,浅谈kotlin
  • 浅谈Kotlin(一):简介及Android Studio中配置,kotlinandroid
  • 用Anko和Kotlin实现Android上的对话框和警告提示(KAD 24),ankokotlin
  • 在Kotlin上怎样用Mockito2 mock final 类(KAD 23),kotlinmockito2
  • 在Android上Kotlin的单元测试(KAD22),kotlinkad22
  • 在Android上,怎样与Kotlin一起使用Retrofit(KAD21),kotlinretrofit
  • Kotlin怎样使用Android的Dagger2,kotlindagger2
  • 再见NullPointerException。在Kotlin里null的处理(KAD 19),kotlinnull

相关文章

  • 2017-05-26Android React-Native系列之(一)零基础搭建React-Native开发环境
  • 2017-05-26Java多线程常见问题,java多线程
  • 2017-05-26安卓高级组件-----进度条,安卓-----进度条
  • 2017-05-26Android--音乐播放器
  • 2017-05-26安卓界面组件----时间日期拾取器,安卓拾取
  • 2017-05-26利用SQL实现简单的分布式锁
  • 2017-05-26Android笔记——Android自定义控件,android自定义控件
  • 2017-05-26Android 中基于 Binder的进程间通信,androidbinder
  • 2017-05-26Webview内存泄漏解决办法1,webview泄漏
  • 2017-05-26安卓第十三天笔记-服务(Service),安卓第十三天

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android中通信协议,Android通信协议
    • Android studio使用gradle动态构建APP(不同的包,不同的icon、label),androidgradle
    • 编译器开发系列--Ocelot语言7.中间代码,编译器--ocelot
    • android 通过uri获取bitmap图片并压缩,
    • Android自定义控件
    • 9套Android实战经典项目资料分享给大家,9套android
    • include的用法例子,以及include+merge的用法例子,includemerge
    • nagios分组出图代码实现讲解[2]
    • 2.4.3 Date & Time组件(下)
    • linux tun/tap设备的实现(kennel 3.10)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有