override fun onCreate(savedInstanceState: Bundle?) {
...
val mpOkay = MediaPlayer.create (this, R.raw.inordnung)
...
}
有效但
val mpOkay = null
override fun onCreate(savedInstanceState: Bundle?) {
...
mpOkay = MediaPlayer.create (this, R.raw.inordnung)
...
}
和
var mpOkay
override fun onCreate(savedInstanceState: Bundle?) {
...
mpOkay = MediaPlayer.create (this, R.raw.inordnung)
...
}
不
kotlin是否希望我一遍又一遍地创建一个新的Mediaplayer并浪费内存?
答案 0 :(得分:1)
您必须声明变量的类型才能为其分配MediaPlayer
,例如:
var mpOkay: MediaPlayer? = null
在声明中
var mpOkay = null
mpOkay
将其类型推断为Nothing?
,这意味着您无法将null
以外的任何值分配给它。
宣言
var mpOkay
根本不是有效的语法,因为此属性没有声明或可推断类型。
答案 1 :(得分:1)
正好适用于像onCreate
这样的情况, 会在访问变量之前将变量初始化为非空值,但出于某种原因无法在构造函数,Kotlin已经
lateinit var mpOkay: MediaPlayer
答案 2 :(得分:0)
除了其他答案,你可以使用"懒惰"设置val属性(不需要测试null,!!
或?
即可使用。
val mp: MediaPlayer by lazy { MediaPlayer.create(context, resId) }
首次访问MediaPlay.create()
时,这只会运行一次mp
。在访问context
之前,请确保mp
有效。