绕过 Kotlin "Property getter or setter expected"



我需要创建一个私有字段并使用它,而无需从其他类访问它。但是我无法将其实例化。我正在为Android开发,并且可以通过这种方式实例化有问题的Field Screenwakelocker:

class MainActivity : AppCompatActivity() {
private val screenWakeLocker: PowerManager.WakeLock = 
                            (getSystemService(Context.POWER_SERVICE) as PowerManager)
                            .newWakeLock(PowerManager.FULL_WAKE_LOCK, "")

"在ongreate((之前无法使用系统服务"

所以我将其实例化:

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()
}

并获得汇编错误"属性Getter或Setter预期"?

如何使其不可用其他类并使用?

您有两个选项:

  1. 选项一个,如果要使用" var",则可以添加 lateinit
  2. 选项二,您可以使用 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, "")
    }`
    

我认为选项两个更好。

使用lateinit关键字进行懒惰初始化。

私人lateinit var screenwakelocker:powermanager.wakelock

最新更新