Kotlin之数据类和单例类

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类实例,并且保证全局唯一

微信扫描二维码,关注我的公众号
欢迎关注这个不是技术号的公众号,我们聊聊别的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章