умный кастинг для безопасного броска - PullRequest
0 голосов
/ 04 сентября 2018
kotlin 1.2.50

Я делаю умный актерский состав и просто задаюсь вопросом, является ли это правильным способом сделать это. Поскольку params.bottomMargin выделено редактором кода как Smart cast to android.support.v7.widget.RecyclerView.LayoutParams

    val child = parent.getChildAt(i)
    val params = child.layoutParams
    if(params is RecyclerView.LayoutParams) {
        val dividerTop = child.bottom + params.bottomMargin
        val dividerBottom = dividerTop + drawable.intrinsicHeight

        drawable.setBounds(dividerLeft, dividerTop, dividerRight, dividerBottom)
        drawable.draw(c)
    }

Просто интересно, могу ли я что-нибудь сделать с приведенным выше кодом для приведения params to RecyclerView.LayouParams

Заранее большое спасибо,

1 Ответ

0 голосов
/ 04 сентября 2018

Это правильное использование умных приведений. Если вам нужна альтернатива, вы также можете использовать оператор when или безопасное приведение, как в следующих примерах:

when (params) {
    is RecyclerView.LayoutParams -> { /* smart cast here */ }
    else -> { /* optional other cases */ }
}

// casts to RecyclerView.LayoutParams? and then invokes the body of let if not null (when params is a RecyclerView.LayoutParams)
(params as? RecyclerView.LayoutParams)?.let {
     /* smart cast here */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...