Обход Котлина "Ожидается получение или установщик собственности" - PullRequest
0 голосов
/ 26 апреля 2018

Мне нужно создать личное поле и использовать его без доступа к нему из других классов. Но я не могу создать экземпляр этого в конструкторе. Я разрабатываю для 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()
}

и получите ошибку компиляции «Ожидается получение или установка свойства» в?: PowerManager.WakeLock

Как сделать его недоступным для других классов и использовать его?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Используйте ключевое слово lateinit для отложенной инициализации.

частная латинская версия экрана ScreenWakeLocker: PowerManager.WakeLock

0 голосов
/ 26 апреля 2018

У вас есть два варианта:

  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, "")
    }`
    

Я думаю, что второй вариант лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...