Использование объекта-компаньона для возврата экземпляра класса в Котлин

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 я уже делал это раньше, и это работает, я пытаюсь сделать то же самое в Котлине:

 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, и инициализировать свойство instance в методе onCreate (плюс я немного сократил 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 } }