Kotlin中使用data关键字定义一个数据类(对比Java,仅需一行代码就搞定)、使用object关键字定义一个单例类

本文介绍了Kotlin中的数据类和单例模式。数据类使用`data`关键字简化了Java中的属性定义、equals、hashCode和toString方法。而Kotlin的单例类通过`object`关键字实现,相比Java的单例模式更简洁。了解这些特性有助于提升Kotlin编程效率。
摘要由CSDN通过智能技术生成

Kotlin可见性修饰符在这里插入图片描述

数据类

  • 在Java中,如果我们定义一个Cellphone数据类,则需要实现其基本的属性和行为,比如:构造函数、equals函数、hashcode函数、toString函数等,相关内容如下:
class Cellphone{
	String brand;
	double price;
	
	public Cellphone(String brand, double price){
		this.brand = brand;
		this.price = price;
	}
	
	public boolean equals(Object obj){
		//instanceof严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例
		//其中obj为一个对象,Class表示一个类或者一个接口
		//当obj为Class的对象,或者是其直接或间接子类,或者是其接口的实现类时
		//结果result都返回true,否则返回false。
		if(obj instanceof Cellphone){
			Cellphone other = (Cellphone)obj;
			return other.brand.equals(brand) && other.price == price;
		}
		return false;
	}
	
	public int hashCode(){
		//根据哈希算法算出来的一个值,这个值跟地址值有关,但不是实际地址值
		return brand.hashCode()+ (int)price;
	}
	
	public String toString(){
		return "Cellphone(brand=" + brand +", price=" + price+")";
	}

注:String类型内容的比较,我们用equals方法,不能用==,==比较的是是否为同一个引用对象(地址)。

  • 但是在Kotlin中,我们只需要使用data关键字就可以定义一个数据类,仅仅需要一行代码就可以搞定:
data class Cellphone(val brand: String, val price: Double)
fun main( ){
    val c1 = Cellphone("小米", 3600.0)
    val c2 = Cellphone("华为", 3600.0)
    println(c1.equals(c2))
    println(c1.hashCode())
    println(c1.toString())
}

单例类

  • 单例模式:是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,一个类只有一个对象实例。
  • 基本的实现思路:单例模式要求类能够返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称)。
  • 实现步骤:
    1.将该类的构造方法定义为私有方法,这样其他地方的代码就无法通过调用该类的构造方法来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例;
    2.在该类内提供一个静态方法,当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类持有的引用为空就创建该类的实例并将实例的引用赋予该类持有的引用。
    例如,在Java中:
public class Singleton {
	//构造函数为私有的
	private Singleton(){
		
	}
	//静态方法
	private static Singleton instance = new Singleton();
	
	public static Singleton getInstance(){
		return instance;
	}
	
    public void singletonTest(){       
    	System.out.println("singletonTest is called.");
    }

	public static void main(String[] args){
		Singleton s;
		s = Singleton.getInstance();
		s.singletonTest();
	}
  • Kotlin中使用object关键字就可以定义一个单例类:
object Singleton{
    fun singletonTest(){
        println("singletonTest is called.")
    }
}
Singleton.singletonTest()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值