Kotlin的数据类,枚举类,单例类

简述

Kotlin相对与Java,它给我们提供了很多的语法糖,供我们方便使用,提高我们的开发效率;

数据类

Java中的常用的Bean类,每一个变量我们都需要写getter,setter方法,却都要手动实现很多方法;
尽管可以用工具帮我们完成,但是代码显得很臃肿,不灵活。
特别是当我们需改其中某一个成员的时候,就得去一堆代码里面寻找对应的修改。

public class JavaDemoBean {
    private String param1;
    private String param2;

    public String getParam1() {
        return param1;
    }

    public void setParam1(String param1) {
        this.param1 = param1;
    }

    public String getParam2() {
        return param2;
    }

    public void setParam2(String param2) {
        this.param2 = param2;
    }
}

在Kotlin中,考虑到了这点
Kotlin新增 数据类的概念,只要使用data关键字声明class,就可以完成上面操作,如下:

data class Demo(val param1: String,val param2: String)

枚举类

Java中的枚举类用enum代替class声明,每一个枚举值对应一个类的实例

public enum JavaEnumDemo {
    ERROR_SERVER(500, "服务器异常"),
    BAD_GATEWAY(502, "服务器异常"),
    NOT_SERVER(404, "页面不存在"),
    TOKEN_INVALID(40101, "登录状态失效"),
    ERROR_PROXY_FIDDLER(502, "fiddler代理失败");

    private String msg;
    private int code;

    JavaEnumDemo(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
}

Kotlin 中 枚举和Java中的枚举相差不大,在class类前加enum声明

enum class KotlinEnumDemo(val code: Int,  val msg: String) {
    ERROR_SERVER(500, "服务器异常"),
    BAD_GATEWAY(502, "服务器异常"),
    NOT_SERVER(404, "页面不存在"),
    TOKEN_INVALID(40101, "登录状态失效"),
    ERROR_PROXY_FIDDLER(502, "fiddler代理失败");
}
fun main(args: Array<String>) {
    val enumKt = KotlinEnumDemo.ERROR_SERVER
    val enumJava = JavaEnumDemo.ERROR_SERVER
    println("kotlin: $enumKt")
    println("java: $enumJava")
}

运行的结果:
这里写图片描述


单例类

单例模式是常见的设计模式,java中常用的单例写法有很多:如下

懒汉式

    public class Singleton {
        private static Singleton singleton = null;
        private Singleton(){}
        public static Singleton getSingleton() {
            if(singleton == null) singleton = new Singleton();
            return singleton;
        }

饿汉式

public class javaSington {
    private static javaSington ourInstance = new javaSington();

    public static javaSington getInstance() {
        return ourInstance;
    }

    private javaSington() {
    }
}

而Kotlin 中 单例模式 可以用object 关键字表示

object KotlinSingleDemo {
    init {
        println("单例初始化")
    }

    fun getInfo() {
        println("info执行")
    }
}

fun main(args: Array<String>) {
    KotlinSingleDemo.getInfo()
    KotlinSingleDemo.getInfo()
    KotlinSingleDemo.getInfo()
}

* 运行结果:*
这里写图片描述

使用object的声明的kotlin单例 类似与java中的蓝汉式写法,但是却也不一定线程不安全的
object声明的单例不能带参数
如果想使用kotlin中的单例和java中一样的效果,或者带参数,可以使用companion object

class Singleton private constructor(){

    companion object {
        private var instan: Singleton?=null

        @Synchronized
        fun getInstance(): Singleton {
            if (instan == null) {
                instan = Singleton()
            }
            return instan!!
        }
    }
}

fun main(args: Array<String>) {
    Singleton.getInstance()
}

猜你喜欢

转载自blog.csdn.net/zybieku/article/details/80696176