使用伴随对象在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代码中做什么,并在Application
的onCreate
方法中初始化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 } }