object 关键字在 kotlin 中有两种使用场景:对象表达式(object expressions)和对象声明(object declarations)。本文将对这两种使用场景分别说明。对象表达式(object expressions)创建继承某个(或某些)类型的匿名类的对象,这些类型可以是接口(以给 Button 设置点击事件为例):可以是抽象类
sealed class Exprdata class Const(val number: Double) : Expr()data class Sum(val e1: Expr, val e2: Expr) : Expr()object NotANumber : Expr() 这里的Expr是密封类,其子类为Const、Sum、NotANumber,使用密封类的好处在于使用when表达式时如果能够验证语句覆盖了所有情况,就不需要为该语句再添加一个el...
classSingletonWithParamsprivateconstructor(val someProperty:String){init{println("SingletonWithParams is initialized with someProperty: $someProperty")}companion object{@Volatileprivatevarinstance:SingletonWithParams?=nullfungetInstance(property:String):SingletonWithParams{returninstance?:synchronized(this){instance?
object MySingleton { init { // 初始化逻辑 } fun doSomething() { // 单例对象的方法 } } class SingletonWrapper { companion object { private var instance: MySingleton? = MySingleton fun destroySingleton() { instance = null } } } // 销毁单例对象并强制调用init块 SingletonWrapper....
INVOKESPECIAL com/ocean/star/aap/Test.<init> ()V PUTSTATIC com/ocean/star/aap/Test.INSTANCE : Lcom/ocean/star/aap/Test; LDC"Test"PUTSTATIC com/ocean/star/aap/Test.TAG : Ljava/lang/String; RETURN MAXSTACK =2MAXLOCALS =0} 可以看到 object 对象会生成一个指定类名的类,在该类中生成一个名...
--- Student init, name=zhang san, age=18 create-2, name=li si, age=23 类的初始化顺序如下: 父类静态代码块(companion object)→ 子类静态代码块(companion object)→ 父类属性初始化 → 父类 init 代码块 → 父类构造函数 → 子类属性初始化 → 子类 init 代码块 → 子类构造函数。 3 主构造函...
init { println("Human init $work") } companion object { val instance: Human by lazy { Human("John") } init { println("companion init one") } init { println("companion init two") } } } 1. 2. 3. 4. 5. 6. 7. 8.
这意味着当你使用object作为你的类说明符时,初始化顺序 * 不能 * 得到保证,并且使用object将积极地...
/*** object关键字,你可以定义一个只能产生一个实例的类-单例* 使用object关键字有三种方式* 1.对象声明:对象声明有利于组织代码和管理状态,尤其是管理整个应用* 运行生命周期内的某些一致性状态。* 2.对象表达式* 3.伴生对象*/object ApplicationConfig {init {println("ApplicationConfig loading...")}fun do...
object关键字实现单例模式 在Kotlin 中实现单例模式非常简单,因为它提供了object关键字,可以用来创建单例对象。这里是一个简洁的示例和详细的解释: 定义单例对象 直接使用object关键字创建单例对象,这是最简单的方法。这个方法不需要编写额外的代码来确保该对象只有一个实例。