表达式user-> {某些代码}如何成为观察者对象?

时间:2018-10-21 15:02:03

标签: java android lambda observer-pattern android-architecture-components

在Google的Guide to app architecture中有一个示例,我不理解-

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 }如何成为Observer对象?

1 个答案:

答案 0 :(得分:3)

表达式user-> { some code }是SAM(单一抽象方法)类型,有关此stack overflow post的更多信息。

简而言之,它只是以下方面的语法糖:

viewModel.getUser().observe(this, new Observer<User>() {
    @Override
    public void onChanged(@Nullable User user) {
        // Some code
    }
});