Следующий код из пробного проекта Kotlin, я думаю, что всегда могу написать sampleVideoView? = findViewById<VideoView>(R.id.videoView)
sampleVideoView? = findViewById<VideoView>(R.id.videoView)
, правильно?
И более
Код sampleVideoView?.setVideoURI(Uri.parse(HLS_STREAMING_SAMPLE))
эквивалентен if (sampleVideoView!=null){sampleVideoView.setVideoURI(Uri.parse(HLS_STREAMING_SAMPLE))}
, правильно?
class MainActivity : AppCompatActivity(){ private var sampleVideoView: VideoView? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) sampleVideoView = findViewById<VideoView>(R.id.videoView) sampleVideoView?.setVideoURI(Uri.parse(HLS_STREAMING_SAMPLE)) ...
sampleVideoView? = findViewById (R.id.videoView)
Это недействительный синтаксис. ?
используется для обозначения типов как нулевых и для безопасного доступа к переменным, содержащим эти типы с нулевым значением.
Код sampleVideoView? .setVideoURI (Uri.parse (HLS_STREAMING_SAMPLE)) эквивалентен if (sampleVideoView! = Null) {sampleVideoView.setVideoURI (Uri.parse (HLS_STREAMING_SAMPLE))}, правильно?
Правда. Но если у вас есть, например, val x = y?.getName()
переменной val x = y?.getName()
будет равно null
или будет содержать имя y
после этого. Это не просто «делать, только если != null
», как может предложить ваш пример.
Вы можете вообще забыть метод findView и заменить его плагином расширения расширения kotlin
apply plugin: 'kotlin-android-extensions'
после этого вы можете написать:
yourVideoViewID.setVideoURI(Uri.parse(HLS_STREAMING_SAMPLE))
Ниже приведен правильный синтаксис для присваивания значения, допускающего значение NULL, для переменной с нулевым значением. Вы не нуждаетесь в вопросительном знаке при назначении
sampleVideoView = findViewById<VideoView>(R.id.videoView)
Второе утверждение эквивалентно