Местная поздняя инициализация в Котлине

Как я могу lateinit инициализировать переменную в funtion, так как lateinit не разрешено для локальных переменных? В противном случае, каков хороший шаблон для этого случая:

 private fun displaySelectedScreen(itemID: Int) { //creating fragment object val fragment: Fragment //initializing the fragment object which is selected when (itemID) { R.id.nav_schedule -> fragment = ScheduleFragment() R.id.nav_coursework -> fragment = CourseworkFragment() R.id.nav_settings -> { val i = Intent(this, SettingsActivity::class.java) startActivity(i) } else -> throw IllegalArgumentException() } //replacing the fragment, if not Settings Activity if (itemID != R.id.nav_settings) { val ft = supportFragmentManager.beginTransaction() ft.replace(R.id.content_frame, fragment)// Error: Variable 'fragment' must be initialized ft.commit() } drawerLayout.closeDrawer(GravityCompat.START) } 

when это выражение, так что

 val fragment: Fragment = when (itemID) { R.id.nav_schedule -> ScheduleFragment() R.id.nav_coursework -> CourseworkFragment() ... else -> throw IllegalArgumentException() } 

будет работать для этого случая использования.

Для локальных переменных нет эквивалента lateinit . Другие языковые конструкции, такие как try или if являются выражениями, поэтому это никогда не требуется.


Обновление 2017-11-19

Kotlin 1.2 поддерживает lateinit для локальных переменных, поэтому

 lateinit val fragment: Fragment 

работает начиная с Kotlin 1.2.

Intereting Posts
Kotlin stdlib и привязка данных Как получить и найти текущее состояние на машине состояния Spring? Нет активного администратора … – блокировка экрана в Android Как установить конфигурации package.json с помощью kotlin-frontend-plugin Вкус продукта: найден дубликат класса Exposed: как разбирать JSON в классе Entity Передача приложения в AndroidViewModel Как объявить параметр функции для приема функций, которые вы выбрали? Котлин «Смарт-литье невозможно, потому что к этому моменту собственность могла быть изменена» Ошибка Android Studio XML «Соответствующий обработчик методов не найден» on onClick В Котлине, как мне типа groupBy Переопределить аннотацию @JsonIgnore для некоторых контроллеров. Джексон. весна Как помещать выражение лямбда после параметров на mapTo вызвать юридический синтаксис? Программно сделать изображениеView видимым / невидимым с помощью переменной Зависимость между Maven и Kotlin не приводит к классам Котлина