Вы можете включить предупреждение для кода, подобного этому.
Перейдите в (Настройки -> Редактор -> Проверки -> Kotlin Android -> Приведение можно преобразовать в findViewById с параметром типа) и переключите серьезность напредупреждение.
Я не думаю, что самому организатору можно научить, что этот конкретный состав должен быть преобразован во что-то другое. И на самом деле, я бы сказал, что это ожидаемое поведение.
Обратите внимание, что выше Android SDK 28 вам не нужно это приведение даже в java:
public void hideChildTextView(View parent, @IdRes int id) {
TextView view = parent.findViewById(id);
view.setVisibility(View.GONE);
}
Этот код будет переведенto:
fun hideChildTextView(parent: View, @IdRes id: Int) {
val view = parent.findViewById<TextView>(id)
view.visibility = View.GONE
}
Это потому, что тип может быть получен из файлового типа, и нет необходимости в приведении (или он фактически приводится в библиотеке).
Итак, давайте проверим другой код в SDKниже 28:
public void hideChildTextView2(View parent, @IdRes int id) {
TextView view = (TextView) parent.findViewById(id);
view.setVisibility(View.GONE);
}
Это будет преобразовано в:
fun hideChildTextView2(parent: View, @IdRes id: Int) {
val view = parent.findViewById(id) as TextView
view.visibility = View.GONE
}
Итак, почему это так? метод findViewById
ниже android 28 возвращает просто View (так что нам нужно привести его к правильному типу), но выше возвращает <T extends View>
, так что компилятор может сделать autocast.
Итак, что я бы предложил? Обновите ваш SDK для компиляции / назначения до 28+, очистите код на Java, и тогда он будет работать так, как вы хотите. ;)