Kotlin---------------magical data class

data class算是Kotlin中一大闪光点了

data class就是一个类中只包含一些数据字段,类似于vo,pojo,java bean。一般而言,我们在Java中定义了这个数据类之后要重写一下toString,equals等方法。要生成get,set方法。

然而在Kotlin中这些都不在需要自己手动去敲了,编译器在背后默默给我们生成了如下的东西:

  • equals()/hashCode()
  • toString()方法
  • componentN()方法
  • copy()方法

如何申明一个简单的数据类? 有一下几点要求:

  • 主构造函数必须要至少有一个参数
  • 主构造函数中的所有参数必须被标记为val或者var
  • 数据类不能有以下修饰符:abstract,inner,open,sealed
  • data class只能实现接口(Kotlin1.1以前的规则),现在也可以继承其它类
data class User(var id: Int, var name: String)

就这么一行代码,你已然拥有了一个数据类,就这么简单。来写几行代码测试一下相关的函数

fun main(args: Array<String>) {
    var user: User = User(123,"liuliqianxiao")
    var user2: User = User(123,"liuliqianxiao")
    println(user.hashCode())
    println(user2.hashCode())
    println(user.equals(user2))// true

    println(user.toString())// User(id=123, name=liuliqianxiao)
}

主构造函数就是跟在类名后面的那个构造函数,必须至少要有一个参数,就代表了必须要有一个数据字段,hashCode,equals,toString都是要依据主构造函数来生成的

主构造函数中的所有参数必须被标记为var或者val,var就表示可读写,val就表示只读,这就相当于表明了数据字段的访问权限,这就达到了Java中我们手动生成set get的目的

编译器自动生成的toString函数格式如下:“类名(数据字段1=value1,数据字段2=value2,……)”

一旦我们手动编写了上述方法(必须要加上override 关键字),则编译器不会自动生成对应的方法

data class User(var id: Int,var name:String) {

    //手动重写toString方法
    override fun toString(): String{
        return "[User(id = $id,name = $name)]"
    }
}

再来看看自动生成的componentN()方法是干嘛用的

在主构造函数中有多少个参数,就会依次生成对应的component1,component2,component3……这些函数返回的就是对应字段的值

componentN函数是用来实现解构申明的

data class User(var id: Int,var name:String) 

fun main(args: Array<String>) {
    var user: User = User(123, "liuliqianxiao")
    var (id,name) = user//多重赋值
    print("$id,$name")
}

拿上面的例子来说,给id赋值,其实调用的是user.component1(),给name赋值其实调用的是component2()函数。

有了这个解构申明,想在一个函数中返回多个结果,就可以申明一个简单的数据类来返回了,然后取值也很方便。

再来看看copy函数,默认生成的copy函数就是用现在的数据字段生成了一个新的对象。

fun copy(id: Int = this.id,name: String = this.name) = User(id,name)

如果只想改变其中的某些字段,就可以在调用copy的时候采用命名参数的方法进行调用

fun main(args: Array<String>) {
    var user: User = User(123, "liuliqianxiao")
    var other: User = user.copy(name = "mdzz")//只想改变名字
}

data class很好用吧,对比java,不吹不黑,怎么说也能节省你一些时间的。

时间: 2024-12-27 02:20:24

Kotlin---------------magical data class的相关文章

Magical Data Modelling Framework for JSON

https://github.com/icanzilb/JSONModel New: In version 0.12.0 I added experimental support for exporting JSON models to CoreData. 最新消息:在0.12.0版本中,我试验性的支持将 JSON models 转化成 CoreData . Give it a try and let me know, post an issue or just get in touch. Tr

Kotlin VS Java:基本语法差异

Kotlin比Java更年轻,但它是一个非常有前途的编程语言,它的社区不断增长. 每个人都在谈论它,并说它很酷. 但为什么这么特别? 我们准备了一系列文章,分享我们在Kotlin开发Android应用程序的经验. 我们将讨论Kotlin与Java在语法,可用性,UI性能和异步性方面的区别,以便您可以决定哪种语言最适合您. 让我们从一些基本的语法差异开始. 这是第一个: 1. 使用Kotlin,你可以用更少的代码做更多 Kotlin的一个主要优点是它的简洁. 你用更少的代码获得更多的功能. 而你写

插件api

public class TextBoxes extends AnAction { // If you register the action from Java code, this constructor is used to set the menu item name // (optionally, you can specify the menu description and an icon to display next to the menu item). // You can

网上搜集第三方(二)

這是我收集了一些第三方的 Library,大部份都還沒用過Orz,只是這樣整理以後要用到的時候會比較好找到. UI UI Design alertView Menu(選單) Side ViewController UICollectionView Segment Control Others 動畫 影像特效 模糊.毛玻璃效果(Blur) 畫面轉換 各種統計圖表 Line Bar Pie Others Pull To ReFresh Notification Auto Layout Data St

很好的iOS学习资料

https://github.com/vsouza/awesome-ios 汇集了很多好的资料 https://github.com/vsouza/awesome-ios Skip to content This repository Pull requests Issues Gist You don’t have any verified emails. We recommend verifying at least one email. Email verification helps ou

github上所有大于800 star OC框架

https://github.com/XCGit/awesome-objc-frameworks#awesome-objc-frameworks awesome-objc-frameworks ID Framework Images 1 AFNetworking/AFNetworking 19,058 A delightful iOS and OS X networking framework 2 rs/SDWebImage 10,139 Asynchronous image downloade

iOS开发常用三方库、插件、知名博客等等

TimLiu-iOS   Swift版本点击这里 欢迎加入QQ交流群: 594119878 介绍 这是一个用于iOS开发的各种开源库.开源资料.开源技术等等的索引库. github排名 https://github.com/trending,github搜索:https://github.com/search 使用方法 根据目录关键字搜索,记得包含@,以保证搜索目录关键字的唯一性. 问题反馈 期待大家和我们一起共同维护,同时也期望大家随时能提出宝贵的意见(直接提交issues即可).请广大网友只

iOS 第三方库、插件、知名博客总结

用到的组件1.通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好化时间 MBProgressHUD一款提示框第三方库 MWPhotoBrowser一款简单的 iOS 照片浏览控件 CTAssetsPickerController一个选择器组件, 支持从用户的相片库选择多张照片和视频. QB

从java到Kotiln

打印日志 Java 1 2 System.out.print("Amit Shekhar"); System.out.println("Amit Shekhar"); Kotlin 1 2 print("Amit Shekhar") println("Amit Shekhar") 常量与变量 Java 1 2 String name = "Amit Shekhar"; final String name =

在Kotlin中使用注释处理Android框架 kapt

本教程介绍如何在 Kotlin 中使用依赖于注释处理的流行的 Android 框架和库. 在日常 Android 开发中,流行着数以千计的框架帮助我们提升开发效率. 使用 Kotlin 开发时仍然可以沿用这些框架,而且和使用 Java 同样简单. 本章教程将提供相关示例并重点介绍配置的差异. 教程以 Dagger. Butterknife. Data Binding. Auto-parcel 以及 DBFlow 为例(其它框架配置基本类似). 以上框架均基于注解处理方式工作:通过对代码注解自动生