Kotlin中特有的几个知识点
数据类
在一个规范的系统架构中,数据类通常占据着非常重要的角色,用于将服务器或者数据库中的数据映射到内存当中,为编程逻辑提供数据模型支持
数据类通常要重写equals()、hashCode()、toString()这几个方法. equals()用来判断是否相等. hashCode()作为equals()配套方法,也需要一起重写,否则会导致HashMap、HashSet、等hash相关的系统类无法正常工作. toString()方法用来提供更详细的日志,否则只会打印出来内存地址
Java实现的话:
public class Test {
private String ta;
private double tb;
public Test(String ta, double tb) {
this.ta = ta;
this.tb = tb;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Test test = (Test) o;
return Double.compare(test.tb, tb) == 0 &&
Objects.equals(ta, test.ta);
}
@Override
public int hashCode() {
return Objects.hash(ta, tb);
}
@Override
public String toString() {
return "Test{" +
"ta='" + ta + '\'' +
", tb=" + tb +
'}';
}
}
看上去非常复杂,关键是还没有任何意义,以上只是为了让他拥有数据类的功能而已
如果使用Kotlin来实现:
data class Test(val ta: String, val tb: Double)
是的,就只需要加上一个data关键字就可以了,当你在一个类前面声明了data关键字时就表明你希望这是一个数据类,Kotlin会根据主构造函数中的参数帮你将equals()、hashCode()、toString()等固定且无实际逻辑意义的方法自动生成,从而大大减少了开发的工作量
当一个类没有任何代码时,还可以将尾部的大括号省略
验证一下:
val test = Test("aa", 23.2)
val test1 = Test("aa", 23.2)
print(test == test1)
此时输出是true,如果去掉data,输出则是false
单例类
单例模式是最基础最常用的设计模式之一,可以用于避免重复对象的创建
核心要点:私有化构造函数,避免外部直接创建,然后对外暴露静态方法用于获取当前对象实例
虽然Java中的单例实现并不复杂,但Kotlin做的更好,他将一些固定的、重复的逻辑隐藏起来,只暴露给我们最简单方便的用法
在Kotlin中创建单例十分简单,只需要将class改为object就可以,当然,studio也提供创建单例类的方式,创建类型选择Object就可以了
object Singleton {
}
现在他已经是单例类了,我们可以直接编写需要的函数:
object Singleton {
fun test() {
print("========")
}
}
不需要我们私有构造,也不需要提供静态方法,调用方式类似Java调用静态方法:
Singleton.test()
看上去只是静态方法的调用,但是Kotlin帮我们在背后自动创建了Singleton类实例,并且保证全局唯一
欢迎关注这个不是技术号的公众号,我们聊聊别的。