Как выражение user-> {некоторый код} может быть объектом Observer? - PullRequest
0 голосов
/ 21 октября 2018

В Руководстве по архитектуре приложения от Google есть пример, который я не понимаю -

UserProfileViewModel:

public class UserProfileViewModel extends ViewModel {
    private LiveData<User> user;
    public LiveData<User> getUser() {
        return user;
    }
}

UserProfileFragment:

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    viewModel.getUser().observe(this, user -> {
      // Update UI.
    });
}

Когда я смотрю на ссылку LiveData , существует только следующий метод observe:

observe(LifecycleOwner owner, Observer<T> observer)

Я запутался, что подпись метода не совпадает:

LifecycleOwner - это библиотека поддержки Fragment, хорошо.

Но как выражение user-> { some code } может быть Наблюдатель объект?

1 Ответ

0 голосов
/ 21 октября 2018

Выражение user-> { some code } является типом SAM (Single Abstract Method), больше информации в этом сообщении переполнения стека .

Короче говоря, это просто синтаксический сахар для:

viewModel.getUser().observe(this, new Observer<User>() {
    @Override
    public void onChanged(@Nullable User user) {
        // Some code
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...