В Java и Android мы можем сделать это:

public static MyApplication extends Application {
   private static Context appContext;

   public void onCreate() {
      appContext = this;
   }

   public static Context getAppContext() {
      return appContext;
   }
}

Так что где-то еще мы можем сделать это:

appContext = MyApplication.getAppContext();

Как мы это делаем в Котлине? Я ходил кругами в течение последнего часа или около того.

Заранее спасибо.

// Редактировать Возможно, я должен был быть более ясным. Я имел в виду, как мы можем написать выше в Kotlin и использовать его в Kotlin.

0
the_new_mr 31 Авг 2017 в 21:53

5 ответов

Лучший ответ

Ключевым элементом, который мне не хватало, было использование блока init для установки appContext, который находится внутри объекта-компаньона (я уже пробовал путь к объекту-компаньону, но изо всех сил пытался получить набор appContext).

Смотрите код ниже:

class MyApplication : Application() {

    init {
        appContext = this
    }

    companion object {
        lateinit var appContext: Context
            private set
    }
}

Это тогда вызывается как обычно через:

val testContext = MyApplication.appContext
2
the_new_mr 13 Сен 2017 в 10:15

Кажется, вы хотите только один объект этого класса во время выполнения. Это называется синглтоном . Есть рекомендации для правильной реализации этого в Java. К счастью, Kotlin позволяет напрямую объявлять одноэлементные объекты в верхней области видимости:

val o = object { your attributes and methods here}

0
fjf2002 1 Сен 2017 в 13:24

Вы можете использовать это таким образом

companion object{  
 //your static fields 
}

Чтобы вызвать его из kotlin ==> ClassName.FieldName

Чтобы вызвать его из Java ==> ClassName.Companion.getFieldName ()

0
Yassine BELDI 31 Авг 2017 в 19:04

Предполагается, что у вас есть java код в Android, и вы хотите преобразовать его в kotlin код:

  1. Посетите ссылку
  2. найти Convert from java

Это помогает мне преобразовать код java, который я нашел в Интернете, и преобразовать его в код kotlin,

пусть это answer не поможет вам в вашем вопросе, но поможет вам преобразовать то, что вы знаете в java, что вы не знаете, как это сделать в kotlin

1
Flix 1 Сен 2017 в 10:34

В Котлине это называется «объект-компаньон»:

class MyApplication: Application {
    companion object {
        var appContext: Context? = null
            private set
    }
}
5
Brett Beatty 31 Авг 2017 в 19:48