使用伴侣对象在Kotlin中返回该类的实例

时间:2017-10-25 17:34:45

标签: java android kotlin

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;
    }
}

1 个答案:

答案 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
    }
}