KotLin——Data class 使用
2015-11-25 13:33
435 查看
使用Kotlin 自建自己的数据类对象,就像Java中的Bean对象
翻译地址:http://kotlinlang.org/docs/reference/data-classes.html
这种就是一个数据类。在主构造函数里所声明的所有属性,编译器都会根据这些属性自动生成以下方法。
数据类的示例:
使用这个数据类的Demo:
还可以这么使用类对象
类对象里,有几个属性,会有几个这个方法
所得到的的值和data.name所得到的的值是一样的!
componentN()函数对应的是声明属性时的属性,copy()函数在下面会谈论到!
如果从基类继承的函数或者在类主体里自定义的函数被具体定义,都不能自动产生!
为了保证生成代码的一致性和有意义的方法,数据类对象必须满足一下要求:
To ensure consistency and meaningful behavior of the generated code, data classes have to fulfil the following requirements:
1,构造函数必须至少有一个参数
2。所有的构造函数参数必须标注val或者var;
3。数据类对象不能是 abstract, open, sealed or inner;
4.数据类对象不能继承其他类,但是可以实现接口
5。在Java虚拟机里,如果生成的类需要有一个无参数的构造函数,所有属性的默认值必须有一个具体的值,例如:
具体代码可以这么写:
数据类和解构声明:
数据类生成的组件功能能够在解构声明使用:
标准的数据类:
标准类库提供了成对和增三倍的能力!在大多数场合, 给数据类起一个好的名字仍是一个不错的设计选择,因为由于提供一个有意义的命名属性使得代码更具有可读性!
注:翻译的不太好!有错误的地方希望能给予指正!非常感谢!
翻译地址:http://kotlinlang.org/docs/reference/data-classes.html
Data Classes
我们经常创建那种什么都不做只持有数据的Bean类,这种情况下许多函数都是从数据对象类里自动产生的。在Kotlin类里,也可以标记成数据类!data class User(val name: String, val age: Int)
这种就是一个数据类。在主构造函数里所声明的所有属性,编译器都会根据这些属性自动生成以下方法。
equals()/hashCode() pair,
数据类的示例:
data class DataClass(val name:String,val age:Int){ override fun equals(other: Any?): Boolean { return super.equals(other) } override fun hashCode(): Int { return super.hashCode() } override fun toString(): String { return super.toString() } }
使用这个数据类的Demo:
fun main(args: Array<String>) { val data=DataClass("zoucheng",27); println(data.component1()) println(data.component2()) println(data.age) println(data.name) println(data.toString()) }
还可以这么使用类对象
val data2=DataClass(name="ddd",age=27);
类对象里,有几个属性,会有几个这个方法
componentN(),比如上面的示例,调用方法
data.component1()
所得到的的值和data.name所得到的的值是一样的!
componentN()函数对应的是声明属性时的属性,copy()函数在下面会谈论到!
如果从基类继承的函数或者在类主体里自定义的函数被具体定义,都不能自动产生!
为了保证生成代码的一致性和有意义的方法,数据类对象必须满足一下要求:
To ensure consistency and meaningful behavior of the generated code, data classes have to fulfil the following requirements:
1,构造函数必须至少有一个参数
2。所有的构造函数参数必须标注val或者var;
3。数据类对象不能是 abstract, open, sealed or inner;
4.数据类对象不能继承其他类,但是可以实现接口
5。在Java虚拟机里,如果生成的类需要有一个无参数的构造函数,所有属性的默认值必须有一个具体的值,例如:
data class User(val name: String = "", val age: Int = 0)
复制:
我们经常有这么一个使用场景:我么需要复制一个类对象,但是改变它的某些属性,保持剩余其他的属性值不变。这就需要用到copy()函数实现。对于上面的User类,可以如下实现复制:fun copy(name: String = this.name, age: Int = this.age) = User(name, age)
具体代码可以这么写:
val jack = User(name = "Jack", age = 1) val olderJack = jack.copy(age = 2)
数据类和解构声明:
数据类生成的组件功能能够在解构声明使用:
val jane = User("Jane", 35) val (name, age) = jane println("$name, $age years of age") // prints "Jane, 35 years of age"
标准的数据类:
标准类库提供了成对和增三倍的能力!在大多数场合, 给数据类起一个好的名字仍是一个不错的设计选择,因为由于提供一个有意义的命名属性使得代码更具有可读性!
注:翻译的不太好!有错误的地方希望能给予指正!非常感谢!
相关文章推荐
- 汇率查询接口,免费实时货币汇率查询换算
- HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
- 备份数据库中的表
- redis 集群方案
- fl2440内核移植(二)——RTC移植
- Delphi中使用Office中VBA的优缺点
- poj3254 Corn Fields 利用状态压缩求方案数;
- mysql union和union all的区别
- MIUI7的优化。
- SQL注入攻击
- python进行crc校验的方法小感
- 第13周项目3-Dijkstra算法的验证
- poj1847Tram【floyd】
- Android自定义ProgressDialog
- 安装arm-none-linux-gnueabi交叉编译器
- java 多线程归纳整理
- haproxy(2)
- Codeforces Round #333 (Div. 1) C. Kleofáš and the n-thlon 树状数组优化dp
- 模拟IC应届生都这么牛,我想到了崩溃
- web安全之token