简述
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()
}