你如何为MediaPlayer声明一个全局变量?
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并浪费内存?
您必须声明变量的类型才能将MediaPlayer
分配给它,例如:
var mpOkay: MediaPlayer? = null
在声明中
var mpOkay = null
mpOkay
得到它的类型推断Nothing?
,这意味着你将不能分配除null
以外的任何值。
和声明
var mpOkay
简直是无效的语法,因为这个属性没有声明或推理类型。
确切地说,像onCreate
这样的情况下,你要在访问它之前初始化一个非空值的变量,但由于任何原因不能在构造函数中做到这一点,Kotlin已经
lateinit var mpOkay: MediaPlayer
除了其他的答案之外,你可以使用“懒”来设置一个val属性(这将不需要测试null, !!
或?
使用)。
val mp: MediaPlayer by lazy { MediaPlayer.create(context, resId) }
这将只在第一次访问mp
时运行MediaPlay.create()
。 在访问mp
之前确保context
有效。