Kotlin中能否创建顶层实例?能否实例化appKt并调用实例方法?
能不能创建appKt实例并调用实例方法?
首先明确:默认情况下,你没法通过appKt()创建实例。
原因很简单:Kotlin里的顶层函数/属性会被编译器自动编译成一个合成类(比如你的app.kt文件,对应生成的类默认是AppKt,首字母大写),这个类是final的,而且构造函数是私有的——它的设计目的就是用来容纳顶层元素的静态成员,根本不允许被实例化。你之前用appKt.abc()调用顶层函数,本质是调用这个合成类的静态方法,和实例没有关系。
如果想要实现“创建实例调用方法”的效果,有两种靠谱的做法:
1. 直接定义普通类
放弃依赖顶层元素的合成类,自己在app.kt里写一个可实例化的类:
// app.kt class AppKt { fun myInstanceMethod() { println("这是实例方法") } } // 调用方式 val app = AppKt() app.myInstanceMethod()
2. 结合顶层元素和自定义实例类
如果想保留顶层函数的便捷性,同时需要实例方法,可以把实例逻辑封装到自定义类里,用顶层属性或函数做入口:
// app.kt // 自定义可实例化的类 class AppHandler { fun instanceMethod() { println("通过实例调用的方法") } } // 顶层属性,持有实例(也可以按需创建) val appHandler = AppHandler() // 顶层函数,内部调用实例方法 fun abc() { appHandler.instanceMethod() }
总结:编译器生成的顶层合成类不能实例化,要实现实例调用的需求,得自己定义类来搞定。
内容的提问来源于stack exchange,提问作者Molly Tian
相关产品推荐
相关产品推荐

