我需要创建一个私有字段并使用它,而无需从其他类访问它。但是我无法将其实例化。我正在为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预期"?
如何使其不可用其他类并使用?
您有两个选项:
- 选项一个,如果要使用" var",则可以添加 lateinit
-
选项二,您可以使用 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