美文网首页
[日更][28]-Kotlin

[日更][28]-Kotlin

作者: 代码多哥 | 来源:发表于2023-09-07 17:18 被阅读0次

因为时间很短,所以内容不是很复杂,写一个有价值的小知识,主要是为了保持每日学习和写作的习惯,大作还是会写到相关的主题里面,尽量做到周更。敬请关注本人的主要作品集:

一路向下之AOSP研究

为了能够最大限度的保证文章的质量,日更主要采用翻译的方法来完成。本系列将主要翻译Kotlin官网的内容。具体的地址

https://kotlinlang.org/docs/home.html

二十七, 函数-类-Data Class

Kotlin的数据类对于存储数据特别有用。Data类具有与类相同的功能,但它们会自动生成其他成员函数。这些成员函数允许您轻松地将实例打印到可读输出、比较类的实例、复制实例等等。由于这些函数是自动可用的,您不必花时间为每个类编写相同的样板代码。
要声明数据类,请使用关键字data:

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

Data类最有用的预定义成员函数是:

Function Description
.toString() 打印类实例及其属性的可读字符串。
.equals() or == 比较类的实例。
.copy() 通过复制另一个类实例来创建类实例,该实例可能具有一些不同的属性。

有关如何使用每个函数的示例,请参阅以下部分:

打印为字符串

要打印类实例的可读字符串,可以显式调用.toString() 函数,也可以使用打印函数println()和print(),它们会自动为您调用.toSring():

// Automatically uses toString() function so that output is easy to read
println(user)            
// User(name=Alex, id=1)

这在调试或创建日志时特别有用。

比较实例

要比较数据类实例,请使用相等运算符==:

val user = User("Alex", 1)
val secondUser = User("Alex", 1)
val thirdUser = User("Max", 2)

// Compares user to second user
println("user == secondUser: ${user == secondUser}") 
// user == secondUser: true

// Compares user to third user
println("user == thirdUser: ${user == thirdUser}")   
// user == thirdUser: false

复制实例

要创建Data类实例的精确副本,请在实例上调用.copy()函数。
要创建Data类实例的副本并更改某些属性,请在实例上调用.copy()函数,并添加属性的替换值作为函数参数。
例如:

val user = User("Alex", 1)
val secondUser = User("Alex", 1)
val thirdUser = User("Max", 2)

// Creates an exact copy of user
println(user.copy())       
// User(name=Alex, id=1)

// Creates a copy of user with name: "Max"
println(user.copy("Max"))  
// User(name=Max, id=1)

// Creates a copy of user with id: 3
println(user.copy(id = 3)) 
// User(name=Alex, id=3)

创建实例的副本比修改原始实例更安全,因为任何依赖于原始实例的代码都不受副本及其处理方式的影响。
有关Data类的详细信息,请参见Data类。

译者注释

  • copy通常用于对象的不可变属性赋值,因为对象生成后,不可变属性不可再修改,因此如果需要修改,就只能基于它的属性值创建新的对象,再创建的时候,使用新的参数值来替换就值,从而达到这个目的。这是为了提升对象的不可变性作出了折衷,牺牲了一定的性能来提升可靠性。

相关文章

网友评论

      本文标题:[日更][28]-Kotlin

      本文链接:https://www.haomeiwen.com/subject/dmrxvdtx.html