美文网首页
[日更][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