Kotlin数据类

简介: 一、数据类 再见,Javabean 默认实现了copy、toString等方法 componentN方法二、allOpen和noArg插件 build.

一、数据类
再见,Javabean
默认实现了copy、toString等方法
componentN方法

二、allOpen和noArg插件
这里写图片描述

build.gradle的源码

group 'net.println.kotlin'
version '1.0-SNAPSHOT'

buildscript {
    ext.kotlin_version = '1.1.0'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
    }
}

apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'kotlin-noarg'
apply plugin: 'kotlin-allopen'

noArg{
    annotation("net.println.kotlin.chapter4.annotations.PoKo")
}

allOpen{
    annotation("net.println.kotlin.chapter4.annotations.PoKo")
}

sourceCompatibility = 1.5

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

三、来看一个例子

package net.println.kotlin.chapter4.dataclass

import net.println.kotlin.chapter4.annotations.PoKo

/**
 * @author:wangdong
 * @description:
 */
/**加data后就不用再写toString方法了*/
@PoKo
data class Country(val id: Int,val name: String)


/**
 * 自定义一个
 */
class ComponentX{
    operator fun component1(): String{
        return "您好,我是"
    }

    operator fun component2(): Int{
        return 1
    }

    operator fun component3(): Int{
        return 1
    }

    operator fun component4(): Int{
        return 0
    }
}

fun main(args: Array<String>) {
    val china = Country(0,"中国")
    println(china)
    //写法一,component1是默认有的
    //component1对应第一个参数
    println(china.component1())
    //component2对应第二个参数
    println(china.component2())

    //写法二
    //下面类似
    val (id,name) = china
    println(id)
    println(name)

    //写法三
    for ((index,value) in args.withIndex()){
        println(index)
        println(value)
    }

    val componentX = ComponentX()
    val (a,b,c,d) = componentX
    println("$a $b $c $d")
}

输出结果:

Country(id=0, name=中国)
0
中国
0
中国
您好,我是 1 1 0

好了,结束了

目录
相关文章
|
6月前
|
分布式计算 Java 数据安全/隐私保护
Kotlin 学习笔记(二)—— 数据类、枚举类、循环、常用集合及操作符的写法(下 )
Kotlin 学习笔记(二)—— 数据类、枚举类、循环、常用集合及操作符的写法(下)
32 0
|
Kotlin
Kotlin | 实现数据类(data)深拷贝
在Kotlin中,data数据类默认的copy方法实现的是浅拷贝,但我们有时候需要实现深拷贝。 在kotlin中,实现就比较容易了。
520 0
Kotlin | 实现数据类(data)深拷贝
|
6月前
|
Java Kotlin
Kotlin 学习笔记(二)—— 数据类、枚举类、循环、常用集合及操作符的写法(上)
Kotlin 学习笔记(二)—— 数据类、枚举类、循环、常用集合及操作符的写法(上)
32 0
|
12月前
|
Java Kotlin
Kotlin data数据类、copy()函数、sealed密封类
Kotlin data数据类、copy()函数、sealed密封类使用
112 0
|
8月前
|
存储 Kotlin
Kotlin中嵌套类、数据类、枚举类和密封类的详解
Kotlin中嵌套类、数据类、枚举类和密封类的详解
65 1
|
11月前
|
安全 Java 编译器
3 亿美元的 bug,Kotlin 帮你避免 | 内联类 value class
3 亿美元的 bug,Kotlin 帮你避免 | 内联类 value class
92 0
|
安全 JavaScript 前端开发
Kotlin 之类和接口
Kotlin 之类和接口
Kotlin 之类和接口
|
Java C# Kotlin
Kotlin学历之特殊类
Kotlin学历之特殊类
74 0
|
设计模式 Java 开发者
带你踏入kotlin大门(五)|基本功_类和继承篇
本篇作为 Kotlin 基本功的倒数第二篇,将为大家带来关于 Kotlin 中类和继承的知识。如果你看到这篇文章的时候,还未听说过 Kotlin 或者从未学习过 Kotlin ,你可以点击链接从本系列的第一篇文章开始学习。
带你踏入kotlin大门(五)|基本功_类和继承篇
|
搜索推荐 安全 JavaScript
【Kotlin 初学者】枚举类-密封类-数据类-继承(下)
三、数据类 3.1 创建数据类 3.2 toString、equals和hashCode的个性化实现 3.3 ==符号 3.4 copy() 函数 3.5 解构声明 四、 继承(extend) 4.1 Any 超类 4.2 继承类 4.3 函数重写 4.4 属性重写 4.5 类型检测(is)
239 0
【Kotlin 初学者】枚举类-密封类-数据类-继承(下)