Нестандартное свойство с пользовательским сеттером Kotlin

Я надеюсь, что кто-то может помочь, я пишу переход от java к Kotlin, и я хочу иметь свойство, которое оно инициализируется в блоке init, у которого есть настраиваемый набор, но не является необязательным.

Вот мой код ниже, однако у этого есть предупреждение, что тег должен быть инициализирован

Я хотел бы сделать это lateInit, но это означает, что он должен быть факультативным (чего я не хочу)

class SkiMarker(mapView: MapView, tag:Tag) : Marker(mapView){ var tag:Tag <- ERROR here set(tag){ this.tag = tag if(tag != null){ this.mPosition = GeoPoint(tag.lat,tag.lon) } } init { this.tag = tag this.mPosition = GeoPoint(tag.lat,tag.lon) val window = MyInfoWindow(mapView,tag) this.infoWindow = window window.subject.observeOn(AndroidSchedulers.mainThread()).subscribe { it -> setIconForTracking(it) } } } 

Большое спасибо заранее за любые комментарии

Для этой логики вам нужно только использовать фоновое поле :

 class SkiMarker(mapView: MapView, tag:Tag) : Marker(mapView) { var tag: Tag = tag set(newTag){ field = newTag // `field` is a keyword } } 

Обратите внимание, что такой код, как set(newTag) {tag = newTag} , эквивалентен setTag(newTag: Tag) { setTag(newTag) } где он фактически вызывает сеттер изнутри самого себя в рекурсии.

Кроме того, tag никогда не имеет null , поэтому if(tag != null) имеет смысла.