表达式 user-> { some code } 如何成为观察者对象?

How can the expression user-> { some code } be an Observer object?

在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 对象呢?

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

简而言之,它只是语法糖:

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