你如何为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有效。