面向对象 - 数据类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) } }