Могу ли я сделать это выражение назначения более компактным в Kotlin? - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь инициализировать диспетчер подключений, используя applicationContext. Я ожидаю, что пользователь отправит контекст активности, а затем я получу от него applicationContext. Однако я не могу быть уверен, что пользователь не отправит applicationContext напрямую. Я написал оператор if else для инициализации ConnectivityManager, но мне было интересно, есть ли лучший способ сделать это. Может быть, есть оператор let или elvis?

/**
 * if user has passed application Context, we use it to get system service,
 * else we get applicationContext from it and use that instead.
 */
private val connectivityManager = if (context.applicationContext == null)
    context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
else
    context.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

1 Ответ

0 голосов
/ 26 апреля 2018
private val connectivityManager = 
    context.run { applicationContext ?: this }.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

Но я думаю, что вы можете переместить это в функцию расширения

private val connectivityManager: ConnectivityManager = 
    context.findSystemService(Context.CONNECTIVITY_SERVICE)

inline fun <reified T> Context.findSystemService(val serviceTag: String): T = 
    (applicationContext ?: this).getSystemService(serviceTag) as T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...