前言:本教程最好在有JAVA的基础下进行学习
一、数据类
java中:
在 java 中,数据类常常要重写 equals() 、hashCode() 、toString()这几个方法。其中,equals()方法用于判断两个数据类是否相等。hashCode() 方法作为 equals() 的配套方法也需要重写。否则会导致 HashMap、HashSet 等 hash 相关的系统类无法正常工作。toString() 方法用于更清晰的输入日志,否则一个数据类将打印出来的就是一行内存地址。
public class Cellphone {
private String brand;
private double price;
public Cellphone(String brand, double price) {
this.brand = brand;
this.price = price;
}
@Override
public int hashCode() {
return brand.hashCode() + (int)price;
}
@Override
public boolean equals(@Nullable Object obj) {
if (obj instanceof Cellphone) {
Cellphone other = (Cellphone) obj;
return other.brand.equals(brand) && other.price == price;
}
return false;
}
@NonNull
@Override
public String toString() {
return "Cellphone(band=" + brand + ",price=" + price +")";
}
}
kotlin中:
data class Cellphone(val brand : String , val price : Double)
在Kotlin中,需要Kotlin只要一行就实现了
刚看到这一幕时的感受,只能用两个字阿来形容:离谱
当一个类前面声明了data关键字的时,就表明你希望这个类是一个数据类,Kotlin会根据主构造函数中的参数帮你将 equals() 、hashCode() 、toString() 等固定且无实际逻辑意义的方法自动生成,从而大大的减少了开发的工作量。
另外,由于函数没有任何代码时,可以将尾部的大括号省略。
下面我们来测试一下这个数据类,在main函数中编写如下代码:
fun main() {
val cellphone1 = Cellphone("Samsung",1299.99)
val cellphone2 = Cellphone("Samsung",1299.99)
println(cellphone1)
println("cellphone1 equals cellphone2 " + (cellphone1 == cellphone2))
}
打印结果:
扫描二维码关注公众号,回复:
15233804 查看本文章
二、单例类
java中:
public class Singleton {
private static Singleton instance;
private Singleton() {}
public synchronized static Singleton getInstance() {
if (instance == null)
instance = new Singleton();
return instance;
}
public void singletonTest(){
System.out.println("singletonTest is called.");
}
}
Kotlin:
实现单例类:
object Singleton {
}
如上加入 singleTest() 进行测试
object Singleton {
fun singletonTest() {
println("singletonTest is called.")
}
}
只需三四行就能实现与java完全相同的效果!调用函数也很简单:
Singleton.singleTest()
比较类似于 Java 静态方法的调用,但其实背后 Kotlin 帮我们创建了 Singleton 类的实例,并且保证全局只存在一个 Singleton 实例。
如果喜欢这个系列的话,不妨点个关注吧!感谢您的观看!
参考:
《第一行代码 Android (第三版)》 ---郭霖