Android Studio предлагает заменить анонимный внутренний класс на лямбду.
titleTextView.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
Log.d("MY_TAG", "textView clicked in anonymous inner class")
}
})
Декомпилированный код Java:
var10000 = this.titleTextView;
if (this.titleTextView == null) {
Intrinsics.throwUninitializedPropertyAccessException("titleTextView");
}
var10000.setOnClickListener((OnClickListener)(new OnClickListener() {
public void onClick(@Nullable View v) {
Log.d("MY_TAG", "textView clicked in anonymous inner class");
}
}));
Перед лямбда, чтобы избежать создания нового объекта для каждого из представлений, которыебыли установлены OnClickListener, было бы лучше, чтобы Activity / Fragment реализовывал View.OnClickListener
интерфейс или использовал Butterknife
@OnClick
аннотацию.
Насколько отличается производительность лямбды, как показано ниже?
titleTextView.setOnClickListener { Log.d("MY_TAG", "textView clicked in lambda") }
Декомпилированный код Java:
TextView var10000 = this.titleTextView;
if (this.titleTextView == null) {
Intrinsics.throwUninitializedPropertyAccessException("titleTextView");
}
var10000.setOnClickListener((OnClickListener)null.INSTANCE);
В случае лямбды я не вижу Log.d("MY_TAG", "textView clicked in lambda")
в декомпилированном коде.