zoukankan      html  css  js  c++  java
  • 数据类

    建立User类

    package loaderman.demo
    
    class User(name: String) {
        val name: String = name
    }
    package loaderman
    
    import loaderman.demo.User
    
    
    fun main(arg: Array<String>) {
    
        val user1 = User("haha")
        val user2 = User("haha")
        println(user1)
        println(user2)
        println(user1.equals(user2))
    
    }
    loaderman.demo.User@3cd1a2f1
    loaderman.demo.User@2f0e140b
    false

    如果重写类tostring和equals方法

    package loaderman.demo
    
    class User(name: String) {
        val name: String = name
        override fun equals(other: Any?): Boolean {
            if (this === other) return true
            if (javaClass != other?.javaClass) return false
    
            other as User
    
            if (name != other.name) return false
    
            return true
        }
    
        override fun hashCode(): Int {
            return name.hashCode()
        }
    }
    package loaderman
    
    import loaderman.demo.User
    
    
    fun main(arg: Array<String>) {
    
        val user1 = User("haha")
        val user2 = User("haha")
        println(user1)
        println(user2)
        println(user1.equals(user2))
    
    }
    loaderman.demo.User@30bfb2
    loaderman.demo.User@30bfb2
    true

    这样可以满足我们的要求,但是如果每个表示数据的类都要重写这两个方法,都要加属性,很麻烦

    数据类规定,属性要通过主构造器指定,而且数据类要在class关键字前面加data.因此,如果前面的User类用数据类的写法,就变成类下面的样子

    package loaderman.demo
    
    data class User(var name: String) {
    
    }
    package loaderman
    
    import loaderman.demo.User
    
    
    fun main(arg: Array<String>) {
    
        val user1 = User("haha")
        val user2 = User("haha")
        println(user1)
        println(user2)
        println(user1.equals(user2))
    
    }

      输出:

    User(name=haha)
    User(name=haha)
    true
    • 编写一个数据类需要注意的事项如下:
    • 主构造器至少要有一个参数
    • 主构造器的所有参数必须标记为val和var
    • 数据类不能是抽象类,open类,封闭类或者内部类

    由于数据类要求主构造器必须至少有一个参数,因此,在数据类中,不可能存在没有参数的主构造器,要想数据类拥有一个没有参数的构造器,可以有二种方法:

    • 为主构造器每一个参数都加上默认值
    • 添加一个么有参数的次构造器,并在调用主构造器事指定主构造器的默认值
  • 相关阅读:
    Linux安装Jenkins
    python实现寻找目录中最新的文件
    python代码实现邮件发送
    面向对象(一) 类与类之间的关系之依赖和关联
    常见模块(五) random模块
    装饰器如何装饰带参数的函数
    常见模块(四) os模块
    常见模块(二) logging模块
    常见模块(三) pickle模块和json模块
    初识模块
  • 原文地址:https://www.cnblogs.com/loaderman/p/10134206.html
Copyright © 2011-2022 走看看