Android Studio 3.0 RC2
Kolin 1.1.51
我创建了一个Android应用程序,我希望返回扩展Application的类的实例,并访问使用Java中的静态执行的等效项。
class BusbyMoviesMainApplication : Application() {
companion object {
private val instance: BusbyMoviesMainApplication = BusbyMoviesMainApplication()
@JvmStatic
fun getBusbyInstance(): BusbyMoviesMainApplication {
return instance
}
}
}
我这样访问它。但是,getCacheDir返回null
BusbyMoviesMainApplication.getBusbyInstance().getCacheDir()
我无法看到我做错了什么。
在Java中,我之前做过这样的事情,有效,我想在Kotlin做同样的事情:
public class BusbyMoviesApplication extends Application {
private static BusbyMoviesApplication mBusbyMoviesApplication;
public static BusbyMoviesApplication getInstance() {
return mBusbyMoviesApplication;
}
@Override
public void onCreate() {
super.onCreate();
mBusbyMoviesApplication = BusbyMoviesApplication.this;
}
}
答案 0 :(得分:4)
在Kotlin代码中,您直接调用Application
子类的构造函数,而不是让框架为您创建它。您可以改为执行您在Java代码中所做的操作,并在instance
的{{1}}方法中初始化Application
属性(另外我稍微缩短了getter):
onCreate
根据以下评论中的讨论,这可能是吸气剂更为惯用的解决方案:
class BusbyMoviesMainApplication : Application() {
companion object {
private lateinit var instance: BusbyMoviesMainApplication
@JvmStatic
fun getBusbyInstance() = instance
}
override fun onCreate() {
super.onCreate()
instance = this
}
}