Kotlin入门笔记(七)数据类 与 单例类

前言:本教程最好在有JAVA的基础下进行学习

一、数据类

java中:

在 java 中,数据类常常要重写 equals() hashCode()toString()这几个方法。其中,equals()方法用于判断两个数据类是否相等。hashCode() 方法作为 equals() 的配套方法也需要重写。否则会导致 HashMapHashSet 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 (第三版)》   ---郭霖

猜你喜欢

转载自blog.csdn.net/m0_46745664/article/details/122881818