Метод может быть обнуляемым, но спецификация вашего класса - нет.Я декомпилировал один из моих APK и обнаружил следующее.
Вот простой метод Котлина:
private fun setAppName() {
val name = view.findViewById<TextView>(R.id.app_name)
name.text = appInfo.appName
}
Вы можете видеть спецификацию name
как TextView.
Этот метод превращается в следующее при компиляции:
private final void setAppName() {
TextView textView = (TextView) this.view.findViewById(R.id.app_name);
Intrinsics.checkExpressionValueIsNotNull(textView, "name");
AppInfo appInfo = this.appInfo;
if (appInfo == null) {
Intrinsics.throwUninitializedPropertyAccessException("appInfo");
}
textView.setText(appInfo.getAppName());
}
Обратите внимание, что приводит к возвращению findViewById
к тому, что вы положили в скобки.В вашем случае EditText.
По сути, этот акт все портит.Это было бы похоже на это:
val view: View? = findViewById(R.id.whatever)
val castView: TextView = view as TextView
Он эффективно обходит @Nullable
из-за того, как Kotlin обрабатывает вывод типов.