при наблюдении liveData с использованием kotlin, почему мы не используем метод onChanged - PullRequest
0 голосов
/ 27 октября 2019

Я новичок в котлине. В Java для наблюдения LiveData мы делаем что-то вроде ниже:

    final Observer<String> nameObserver = new Observer<String>() {
        @Override
        public void onChanged(@Nullable final String newName) {
        // do some work;
        }
    };

model.getCurrentName().observe(this, nameObserver);

, но в kotlin

val nameObserver = Observer<String> { newName ->
    // do some work
    }

model.currentName.observe(this, nameObserver)

Итак, моя путаница заключается в том, где метод переопределения onChanged пошел в kotlin? почему мы не пишем это?

Кроме того, в Java Обозреватель запускается с

new Observer ()

, но в kotlin его

Наблюдатель

Я понимаю, что мне не нужно использовать новое ключевое слово. Но как насчет круглых скобок ()? почему не используется в kotlin?

1 Ответ

3 голосов
/ 27 октября 2019

Короче говоря, вы можете написать Observer { } в Kotlin из-за преобразования SAM (Single abstract method). Если у вас есть один абстрактный метод в Java interface, вы можете преобразовать его в лямбда-выражение. Это предлагает более читаемый код, и метод onChanged все еще существует, но работает под капотом.

Так же, как Java 8, Kotlin поддерживает преобразования SAM. Это означает, что литералы функций Kotlin могут автоматически преобразовываться в реализации интерфейсов Java с помощью одного метода, не используемого по умолчанию, при условии, что типы параметров метода интерфейса соответствуют типам параметров функции Kotlin.

преобразование SAM

Чтобы создать анонимный класс, вы используете ключевое слово new, а в Kotlin вы используете ключевое слово object:.

object : Observer<T> {

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...