2016-05-16 3 views
32

Что такое эквивалент static initialisation block в Котлине?Статический блок инициализации в Котлине

Я понимаю, что Kotlin не имеет статических вещей. Я ищу что-то с эквивалентной семантикой - код запускается один раз, когда класс загружается первым.

Мой конкретный вариант использования заключается в том, что я хочу включить функцию DayNight из библиотеки Android AppCompat и the instructions сказать, чтобы поставить код в статическом блоке инициализации класса Application.

ответ

52

С некоторой точки зрения, companion objects в Котлине эквивалентны статическим частям классов Java. В частности, они инициализируются перед первым использованием класса, и это позволяет использовать их init блоков в качестве замены для Java статических инициализаторов:

class C { 
    companion object { 
     init { 
      //here goes static initializer code 
     } 
    } 
} 
+0

объекта компаньон является излишеством здесь – voddan

+1

@voddan, OP вопроса о выполнении коды перед первое использование существующего класса. Решение с объявлением 'object' требует, чтобы он фактически использовал его где-то из-за ленивой инициализации. – hotkey

+0

@voddan Не могли бы вы объяснить, почему это перебор и каковы альтернативы? –

Смежные вопросы