文章目录
一. 数据类
1. 基础用法
data class Cellphone(val brand: String, val price: Double)
自动生成了get set hashcode equals toString等方法。通过反编译(打开AS,在Tools-Kotlin-ShowBytecode-Decompile)可以得到如下结果
public final class Cellphone {
@NotNull
private final String brand;
private final double price;
@NotNull
public final String getBrand() {
return this.brand;
}
public final double getPrice() {
return this.price;
}
public Cellphone(@NotNull String brand, double price) {
Intrinsics.checkNotNullParameter(brand, "brand");
super();
this.brand = brand;
this.price = price;
}
@NotNull
public final String component1() {
return this.brand;
}
public final double component2() {
return this.price;
}
@NotNull
public final Cellphone copy(@NotNull String brand, double price) {
Intrinsics.checkNotNullParameter(brand, "brand");
return new Cellphone(brand, price);
}
// $FF: synthetic method
public static Cellphone copy$default(Cellphone var0, String var1, double var2, int var4, Object var5) {
if ((var4 & 1) != 0) {
var1 = var0.brand;
}
if ((var4 & 2) != 0) {
var2 = var0.price;
}
return var0.copy(var1, var2);
}
@NotNull
public String toString() {
return "Cellphone(brand=" + this.brand + ", price=" + this.price + ")";
}
public int hashCode() {
String var10000 = this.brand;
return (var10000 != null ? var10000.hashCode() : 0) * 31 + Double.hashCode(this.price);
}
public boolean equals(@Nullable Object var1) {
if (this != var1) {
if (var1 instanceof Cellphone) {
Cellphone var2 = (Cellphone)var1;
if (Intrinsics.areEqual(this.brand, var2.brand) && Double.compare(this.price, var2.price) == 0) {
return true;
}
}
return false;
} else {
return true;
}
}
}
2. 进阶
2.1 去除自动生成的get()/set()方法
@JvmField
2.2 更换自动生成的get、set方法名
2.3 多个构造方法
data class Child @JvmOverloads constructor(
var age: Int,
var name: String = ""
)
2.4 componentN()
二. 单例
class改成object,其他的跟java里面差不多
object Singleton {
}
三. 静态
companion object
@JvmField - 修饰静态变量
@JvmStatic - 修饰静态方法
@JvmField 和 @JvmStatic 只能写在 object 修饰的类或者 companion object 里,写法虽然有些别扭,但是效果是真的是按 static 来实现的
class BookKotlin {
companion object {
@JvmField
var nameStatic: String = "BB"
@JvmStatic
fun speakStatic() {
}
}
}