我需要创建一个私有字段并使用它而无需从其他类访问它。但我不能在构造函数中实例化它。 我正在为Android开发,有问题的字段screenWakeLocker无法以这种方式实例化:
class MainActivity : AppCompatActivity() {
private val screenWakeLocker: PowerManager.WakeLock =
(getSystemService(Context.POWER_SERVICE) as PowerManager)
.newWakeLock(PowerManager.FULL_WAKE_LOCK, "")
“在onCreate()之前,活动无法使用系统服务”
所以我在OnCreate中实例化它:
class MainActivity : AppCompatActivity() {
private var game: Game = Game()
private var screenWakeLocker?: PowerManager.WakeLock;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
screenWakeLocker = (getSystemService(Context.POWER_SERVICE) as PowerManager).newWakeLock(PowerManager.FULL_WAKE_LOCK, "")
}
override fun onResume(){
super.onResume()
screenWakeLocker.acquire()
}
并在?处获得编译错误“Property getter or setter expected”:?PowerManager.WakeLock
如何让其他类无法使用它并使用它?
答案 0 :(得分:2)
您有两种选择:
选项二,您可以使用 by lazy ,其中对象在需要时进行初始化
private lateinit var screenWakeLocker: PowerManager.WakeLock
private val screenWakeLockerTwo by lazy {(getSystemService(Context.POWER_SERVICE) as PowerManager).newWakeLock(PowerManager.FULL_WAKE_LOCK, "")}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
screenWakeLocker = (getSystemService(Context.POWER_SERVICE) as PowerManager).newWakeLock(PowerManager.FULL_WAKE_LOCK, "")
}`
我认为选项二更好。
答案 1 :(得分:0)
使用lateinit关键字进行延迟初始化。
private lateinit var screenWakeLocker:PowerManager.WakeLock