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()