Kotlin 中,data class 和普通 class

2024-06-18 22:28
文章标签 class kotlin data 普通

本文主要是介绍Kotlin 中,data class 和普通 class,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

data class

  1. 自动生成常用方法

    • data class 会自动生成 equals(), hashCode(), toString(), copy() 方法和 componentN() 函数。
    • 这些方法在数据类中非常有用,简化了代码。
  2. 主要用于存储数据

    • data class 主要用于存储数据,即它们通常是只包含属性和简单方法的类。
  3. 声明方式

    • data class 的声明方式为 data class ClassName(val property1: Type, val property2: Type, ...)
  4. 例子

    data class User(val name: String, val age: Int)
    

普通 class

  1. 不自动生成常用方法

    • 普通类不会自动生成 equals(), hashCode(), toString(), copy() 方法和 componentN() 函数。
    • 如果需要这些方法,需要手动实现。
  2. 更通用

    • 普通类更通用,可以包含更复杂的逻辑,不只是用于存储数据。
  3. 声明方式

    • 普通类的声明方式为 class ClassName
  4. 例子

    class User(val name: String, val age: Int)
    

比较

特性data class普通 class
用途主要用于存储数据通用用途,适合包含复杂逻辑的类
自动生成方法equals(), hashCode(), toString(), copy(), componentN()不自动生成,需要手动实现
声明方式data class User(val name: String, val age: Int)class User(val name: String, val age: Int)
代码简洁性简化了数据类的实现,减少样板代码需要更多的手动实现

示例

以下是一个完整的示例,展示了 data class 和普通 class 的区别:

// Data class example
data class User(val name: String, val age: Int)fun main() {val user1 = User("Alice", 25)val user2 = User("Alice", 25)println(user1) // 自动生成的 toString() 方法println(user1 == user2) // 自动生成的 equals() 方法println(user1.copy(age = 26)) // 自动生成的 copy() 方法
}// Regular class example
class User(val name: String, val age: Int) {override fun toString(): String {return "User(name='$name', age=$age)"}override fun equals(other: Any?): Boolean {if (this === other) return trueif (other !is User) return falseif (name != other.name) return falseif (age != other.age) return falsereturn true}override fun hashCode(): Int {var result = name.hashCode()result = 31 * result + agereturn result}
}fun main() {val user1 = User("Alice", 25)val user2 = User("Alice", 25)println(user1) // 自定义的 toString() 方法println(user1 == user2) // 自定义的 equals() 方法
}

这篇关于Kotlin 中,data class 和普通 class的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073224

相关文章

mysql索引一(普通索引)

mysql的索引分为两大类,聚簇索引、非聚簇索引。聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引则不同。聚簇索引能够提高多行检索的速度、非聚簇索引则对单行检索的速度很快。         在这两大类的索引类型下,还可以降索引分为4个小类型:         1,普通索引:最基本的索引,没有任何限制,是我们经常使用到的索引。         2,唯一索引:与普通索引

BD错误集锦3——ERROR: Can't get master address from ZooKeeper; znode data == null

hbase集群没启动,傻子!   启动集群 [s233 s234 s235]启动zk集群 $>zkServer.sh start $>zkServer.sh status   [s233] 启动dfs系统 $>start-dfs.sh 如果s237 namenode启动失败,则 [s237] $>hadoop-daemon.sh start namenode [s233]启动yarn集群

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解 码客 卢益贵 ygluu 关键词:游戏策划 可配置化 模块化配置 数据引擎 条件系统 红点系统 一、前言 在插件式模块化软件开发当中,既要模块高度独立(解耦)又要共享模块数据,最好的方法是有个中间平台(中间件)提供标准的接口来进行数据的交换,这在很多行业软件开发中已经广泛应用。但是,由于中间件的抽象和封

Class 对象在执行引擎中的初始化过程

一个 class 文件被加载到内存中需要经过 3 大步:装载、链接、初始化。 装载 装载是指 Java 虚拟机查找 .class 文件并生成字节流,然后根据字节流创建 java.lang.Class 对象的过程。 链接 链接过程分为 3 步:验证、准备、解析。 验证: 初始化 这是 class 加载的最后一步,这一阶段是执行类构造器方法的过程,并真正初始化类变量。 1.文件格式检验:检

Core Data 网络应用实例

转自:http://www.cocoachina.com/applenews/devnews/2014/0430/8275.html 转自 answer_huang的博客 几乎每一个应用开发者都需要经历的就是将从 web service 获取到的数据转变到 Core Data 中。这篇文章阐述了如何去做。我们在这里讨论的每一个问题在之前的文章中都已经描述过了,并且 Apple 在

机器学习算法(二):1 逻辑回归的从零实现(普通实现+多项式特征实现非线性分类+正则化实现三个版本)

文章目录 前言一、普通实现1 数据集准备2 逻辑回归模型3 损失函数4 计算损失函数的梯度5 梯度下降算法6 训练模型 二、多项式特征实现非线性分类1 数据准备与多项式特征构造2 逻辑回归模型 三、逻辑回归 --- 正则化实现1 数据准备2 逻辑回归模型3 正则化损失函数4 计算损失函数的梯度5 梯度下降6 训练模型 总结 前言 今天我们开始介绍逻辑回归的从零开始实现代码了,

在eclipse中进行nutch1.7二次开发通过ant编译build.xml出现Class not found javac1.8

把nutch1.7通过svn导入到本地后打算进行二次开发却在开始用ant进行build.xml构建的时候出现Class not found javac1.8 暂且不管哪个sonar没有找到的问题,我们先把那个Class not found :javac1.8的问题: 多半是因为Ant版本太低,低于1.9,无法和java1.8兼容,因为我的java运行环境是1.8的,Ant版本也是1.8,所

Spring Boot 打成的 jar 和普通的 jar

Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过 java -jar xxx.jar 命令来运行,这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。 Spring Boot 的 jar 无法被其他项目依赖,主要还是他和普通 jar 的结构不同。普通的 jar 包,解压后直接就是包名,包里就是我们的代码,而 Spri

运算符重载(重载为普通函数)

运算符重载 – 基本概念 郭  炜  刘家瑛 #include <iostream>using namespace std;//this指针的应用class complex{private:double real;double img;public:complex(int i=0.0,int j=0.0):real(i),img(j){}~complex(){}void pr

spring-data-redis 连接池应用

具体配置看我的项目。用的是redisTemplate ,和jdbctemplate  是不是很相似。 真的不想吐槽csdn,钻钱眼里了,我想上传我的代码,免费都不行吗 想要测试代码可以私信,也可以模仿https://www.cnblogs.com/tankaixiong/p/3660075.html  这个链接下的。