使用伴随对象在Kotlin中返回类的一个实例

Android Studio 3.0 RC2 Kolin 1.1.51 

我创建一个Android应用程序,我想返回扩展应用程序的类的实例,并访问您将使用静态在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; } } 

在Kotlin代码中,您直接调用Application子类的构造函数,而不是让框架为您创建它。 你可以改为在Java代码中做什么,并在ApplicationonCreate方法中初始化instance属性(加上我缩短了getter):

 class BusbyMoviesMainApplication : Application() { companion object { private lateinit var instance: BusbyMoviesMainApplication @JvmStatic fun getBusbyInstance() = instance } override fun onCreate() { super.onCreate() instance = this } } 

根据下面评论的讨论,这也许是获得者更习惯的解决方案:

 class BusbyMoviesMainApplication : Application() { companion object { @JvmStatic lateinit var instance: BusbyMoviesMainApplication private set } override fun onCreate() { super.onCreate() instance = this } }