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

好了,结束了

目录
相关文章
|
21小时前
|
数据安全/隐私保护 Kotlin
Kotlin - 类成员
Kotlin - 类成员
13 5
|
3天前
|
存储 前端开发 Java
Kotlin教程笔记(18) - 数据类
Kotlin教程笔记(18) - 数据类
12 4
|
4天前
|
Java 开发者 Kotlin
Kotlin学习笔记- 类与构造器
本篇笔记详细介绍了Kotlin中的类与构造器,包括类的基本概念、主构造器与次构造器的区别、构造器中参数的使用规则、类的继承以及构造器在继承中的应用等。通过具体示例,解释了如何在类中定义属性、实现构造逻辑,并探讨了Kotlin类的继承机制和Any类的作用。此外,还简要介绍了包的概念及其在组织代码中的作用。适合初学者深入理解Kotlin面向对象编程的核心概念。
14 3
|
5天前
|
数据安全/隐私保护 Kotlin
Kotlin教程笔记(7) - 类成员
Kotlin教程笔记(7) - 类成员
14 3
|
6天前
|
数据安全/隐私保护 Kotlin
Kotlin14 - 类成员
Kotlin14 - 类成员
33 5
|
6天前
|
Java 开发者 Kotlin
Kotlin学习笔记- 类与构造器
Kotlin学习笔记- 类与构造器
20 3
|
7天前
|
JSON 调度 数据库
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点。文章详细解析了Kotlin中的协程、扩展函数、高阶函数、密封类及`inline`和`reified`关键字在Android开发中的应用,帮助读者更好地理解和使用这些特性。
10 1
|
2天前
|
存储 前端开发 Java
Kotlin教程笔记(18) - 数据类
Kotlin教程笔记(18) - 数据类
|
9天前
|
存储 前端开发 Java
Kotlin教程笔记(18) - 数据类
本教程笔记详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。对于快速学习需求,推荐查看“简洁”系列教程。本文重点介绍了Kotlin中的数据类(data class),包括其自动生成的`componentN`方法、`toString()`、`copy()`等方法,以及如何通过allOpen和noArg插件解决data class默认final和无参构造函数的问题。
21 0
|
Kotlin
【Kotlin】Kotlin 类的继承 二 ( 属性覆盖 | 属性覆盖的四种情况 | 常量 / 变量 属性覆盖 | 子类初始化与属性覆盖 )
【Kotlin】Kotlin 类的继承 二 ( 属性覆盖 | 属性覆盖的四种情况 | 常量 / 变量 属性覆盖 | 子类初始化与属性覆盖 )
329 0