数据类

建立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类,封闭类或者内部类

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

  • 为主构造器每一个参数都加上默认值
  • 添加一个么有参数的次构造器,并在调用主构造器事指定主构造器的默认值

 

转载于:https://www.cnblogs.com/loaderman/p/10134206.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值