Как я могу избежать нулевых свойств в Котлине

Я использую Kotlin довольно долгое время, но я не смог добиться не-нулевых типов для всех свойств в Котлине.

Пожалуйста, посмотрите ниже код, есть некоторые сценарии, где я должен использовать нулевые типы. Я знаю, что могу использовать lateinit но в некоторых сценариях это не подходит. Как я могу избежать null в моем коде?

Если кто-то может переписать код без нулевых типов или исправить мои ошибки, мне более чем достаточно, чтобы я все понял.

 class MusicService : Service(), PlaybackManager.PlaybackServiceCallback { private val mDelayedStopHandler = DelayedStopHandler(this) private val eventBus = EventBus.getDefault() //How to avoid nullable types private var mMediaNotificationManager: MediaNotificationManager? = null private var mSession: MediaSessionCompat? = null var mSessionToken: MediaSessionCompat.Token? = null var mPlaybackManager: PlaybackManager? = null var mTransportControls: MediaControllerCompat.TransportControls? = null override fun onCreate() { Timber.d("onCreate") super.onCreate() //Init MediaSessionCompat and TransportControls mSession = MediaSessionCompat(this, "MusicService") mSessionToken = mSession?.sessionToken mSession?.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS) mTransportControls = MediaControllerCompat(this, mSession).transportControls //EventBus Reg eventBus.reg(this) eventBus.post(GetAllMediaEventRequest()) } @Subscribe fun onGetAllMediaEventResponse(event: GetAllMediaEventResponse) { Timber.d("GetAllMediaEventResponse event.status = ", event.status) //init PlaybackManager mPlaybackManager = PlaybackManager(mPlayback = LocalPlayer(this), mMediaData = event.mediaItems, mServiceCallback = this) mSession?.setCallback(mPlaybackManager!!.mMediaSessionCallback) //Init Notification try { mMediaNotificationManager = MediaNotificationManager(this) } catch (e: RemoteException) { throw IllegalStateException("Could not create a MediaNotificationManager", e) } } } 

Обновить:

Спасибо за весь ответ, который у меня есть. После небольшого исследования я сделал все свойства недействительными. Пожалуйста, проверьте мой код и исправьте меня, если возникнут какие-либо ошибки.

 class MusicService : Service(), PlaybackManager.PlaybackServiceCallback { //NotNull private val mDelayedStopHandler = DelayedStopHandler(this) private val eventBus = EventBus.getDefault() //Lateinit lateinit var mSessionToken: MediaSessionCompat.Token lateinit var mTransportControls: MediaControllerCompat.TransportControls //Lazy private val mSession: MediaSessionCompat by lazy { MediaSessionCompat(this, "MusicService") } private val mMediaNotificationManager: MediaNotificationManager by lazy { try { MediaNotificationManager(this) } catch (e: RemoteException) { throw IllegalStateException("Could not create a MediaNotificationManager", e) } } val mPlaybackManager: PlaybackManager by lazy { PlaybackManager(mPlayback = LocalPlayer(this), mServiceCallback = this) } override fun onCreate() { LogHelper.d(TAG, "onCreate") super.onCreate() //Init MediaSessionCompat and TransportControls mSessionToken = mSession.sessionToken mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS) mTransportControls = MediaControllerCompat(this, mSession).transportControls mSession.setCallback(mPlaybackManager.mMediaSessionCallback) //EventBus Reg eventBus.reg(this) eventBus.post(GetAllMediaEventRequest()) } @Subscribe fun onGetAllMediaEventResponse(event: GetAllMediaEventResponse) { Timber.d("GetAllMediaEventResponse event.status = ", event.status) mPlaybackManager.mMediaData = event.mediaItems } } 

Я думаю, вам может понадобиться

 a?.let { println(it) // if `a` isn't null, the code will reach here // and `it` will hold the value of `a` // you can do a lot of things here without checking if it is null }