关闭

KotLin——Data class 使用

标签: Kotlin
9669人阅读 评论(0) 收藏 举报
分类:

使用Kotlin 自建自己的数据类对象,就像Java中的Bean对象
翻译地址: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"

标准的数据类:
标准类库提供了成对和增三倍的能力!在大多数场合, 给数据类起一个好的名字仍是一个不错的设计选择,因为由于提供一个有意义的命名属性使得代码更具有可读性!

注:翻译的不太好!有错误的地方希望能给予指正!非常感谢!

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Kotlin-13.数据类(data class)

数据类的概念(data class)在Kotlin中一些只保存数据的类;编译器会为数据类(data class)自动生成函数equals()/hashCode();toString();compone...
  • qq_32115439
  • qq_32115439
  • 2017-06-22 22:40
  • 1285

Kotlin Data Class

Kotlin Data ClassKotlin源码,简单的Student.kt类data class Student(val name: String, val age: Int?= null)使用命...
  • lihenair
  • lihenair
  • 2017-06-15 18:03
  • 1475

CLASS-DATA 静态属性-理解

CLASS-DATA   Syntax 语法 CLASS-DATA attr [options]. ClASS-DATA attr(属性)[可选] Effect The state...
  • hackai886
  • hackai886
  • 2012-09-07 20:41
  • 3317

Kotlin-数据类

概述在开发过程中,经常会创建一些数据里,其没有任何逻辑功能,仅仅来用来保存数据。在Kolin中,将这些类统一称为数据类,用关键字data标记。data class User(val name: Str...
  • IO_Field
  • IO_Field
  • 2016-11-23 14:01
  • 1524

JsonToKotlin(Kotlin开发神器)----Json数据示例直接生成Kotlin Data Class 开发插件

前言在使用Kotlin进行开发的时候,我们需要经常对Json数据做解析和处理,在Java的类似开发环境中,我们就需要参照Json的数据格式相应的生成对应的JavaBean,在Java开发的时候有Gso...
  • wuseal
  • wuseal
  • 2017-08-23 17:17
  • 3530

Kotlin语法(六)-类和继承

类 1.     声明类          Kotlin使用关键字*class *{:.keyword}声明类。类声明包括类名、类头(指定其类型参数,主构造函数等)和这个...
  • tangxl2008008
  • tangxl2008008
  • 2016-08-13 17:03
  • 4449

使用 kotlin 来进行 Android 开发(一)

文章选自本人知乎专栏并做更改:http://zhuanlan.zhihu.com/kotandroid 未经允许请勿转载。 本系列文章将通过解剖 kotlin_android_base_fram...
  • syfyw
  • syfyw
  • 2015-11-20 15:13
  • 7022

Kotlin Reference (八) 可见性修饰符, data class,object Claz

KotLin 相关文档官方在线Reference kotlin-docs.pdf Kotlin for android Developers 中文翻译 Kotlin开发工具集成,相关平台支持指...
  • jjwwmlp456
  • jjwwmlp456
  • 2017-06-21 23:31
  • 651

Kotlin Data Class

Kotlin Data ClassKotlin源码,简单的Student.kt类data class Student(val name: String, val age: Int?= null)使用命...
  • lihenair
  • lihenair
  • 2017-06-15 18:03
  • 1475

Kotlin-13.数据类(data class)

数据类的概念(data class)在Kotlin中一些只保存数据的类;编译器会为数据类(data class)自动生成函数equals()/hashCode();toString();compone...
  • qq_32115439
  • qq_32115439
  • 2017-06-22 22:40
  • 1285
    个人资料
    • 访问:312877次
    • 积分:4151
    • 等级:
    • 排名:第8577名
    • 原创:101篇
    • 转载:63篇
    • 译文:4篇
    • 评论:44条
    博客专栏
    最新评论