面向对象 - 数据类data class,密封类Sealed Class

一、数据类
1、格式data class 类名(var param1 :数据类型,...){}
2、自动生成tostring,equals,hashcode方法
3、自动生成getter,setter,相比java代码,十分简介
//在 Java 中,我们会这么写
public class Cellphone {
    
    String brand;
    double price;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Cellphone cellphone = (Cellphone) o;
        return Double.compare(cellphone.price, price) == 0 &&
                Objects.equals(brand, cellphone.brand);
    }

    @Override
    public int hashCode() {
        return Objects.hash(brand, price);
    }

    @Override
    public String toString() {
        return "Cellphone{" +
                "brand='" + brand + '\'' +
                ", price=" + price +
                '}';
    }
}

//在 Kotlin 中,你会发现是如此的简洁
data class Cellphone(val brand: String, val price: Double)
data class Person(var name: String, var age: Int)

    private fun testData() {
        var per = Person("jack", 12);
        Log.i("aaa", per.name)
        Log.i("aaa", per.toString())
    }

二、密封类

通常情况下使用枚举来封装有限的集合值,kotlin提供了新的解决方法 Sealed Class 密封类
/**
* 密封类,封装类
* 1、通常限定一些有限集合的状态值,如
* 网络状态:成功,失败
* 账户状态:vip,普通
* 2、与when配合使用,无需if-else
*/
1、定义
sealed class Result<out T : Any> {
    data class Success<out T : Any>(val data: T) : Result<T>()
    data class Error(val exception: Exception) : Result<Nothing>()
}

 2、使用

    private fun testSealed() {
        val result = if (true) {
            Result.Success("success")
        } else {
            Result.Error(Exception("error"))
        }
        when (result) {
            is Result.Success -> print(result.data)
            is Result.Error -> print(result.exception)
        }
    }

 

posted @ 2022-08-01 15:29  随易来了  阅读(177)  评论(0编辑  收藏  举报