object
object 表达式
创建匿名内部类的形式:object: ClassName {...}
val handler:Handler=object: Handler(){ override fun handleMessage(msg: Message?) { super.handleMessage(msg) when(msg?.what) { 1 -> "Expression1" 2 -> "Expression2" else -> "else" } } }
object 对象声明,实现单例模式
和普通类的声明一样,可以包含属性、方法、初始化代码块以及可以继承其他类或者实现某个接口,但是它不能包含构造器(包括主构造器以及次级构造器)
Kotlin语言中使用"object"修饰静态类,被修饰的类,可以使用类名.方法名的形式调用,如下:
object Util {
fun getCurrentVersion(): String {
return "java 1.8"
}
}
调用:
println(Util.getCurrentVersion())
object Obj{ var name="jack" var age="10" init { println("object init...") } }
使用jad反编译的java代码如下:
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimports(3) // Source File Name: dd.kt package com.jack.objects; import java.io.PrintStream; import kotlin.jvm.internal.Intrinsics; public final class Obj { public final String getName() { return name; } public final void setName(String <set-?>) { Intrinsics.checkParameterIsNotNull(<set-?>, "<set-?>"); name = <set-?>; } public final String getAge() { return age; } public final void setAge(String <set-?>) { Intrinsics.checkParameterIsNotNull(<set-?>, "<set-?>"); age = <set-?>; } private Obj() { } private static String name = "jack"; private static String age = "10"; public static final Obj INSTANCE; static { Obj obj = new Obj(); INSTANCE = obj; String s = "object init..."; boolean flag = false; System.out.println(s); } }
可见kotlin中object实现的单例模式对应java中的饿汉式单例模式(线程安全,调用效率高,但是不能延时加载)
伴生对象 Companion Object
伴生对象(companion object)是一个声明在类中的普通对象,它可以有名称 (默认为Companion
) ,它可以实现一个接口或者有扩展函数或属性,一个类的伴生对象只能有一个。
Kotlin语言中使用"companion object"修饰静态方法,可以使用类名.方法名的形式调用,如下:
class Util2 {
companion object {
fun getCurrentVersion(): String {
return "java 1.8"
}
}
}
调用:
println(Util2.getCurrentVersion())
println(Util2.Companion.getCurrentVersion())