java - 表达式 user-> { some code } 怎么可能是一个 Observer 对象呢?

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

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
    }
});

关于java - 表达式 user-> { some code } 怎么可能是一个 Observer 对象呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52916663/

相关文章:

c# - Visual Studio 调试 "quick watch"工具和 lambda 表达式

java - Hibernate:通过单个连接表引用多个表

java - BIRT 在 JAR 中构建独立报告生成器

java - Google App Engine Blobstore 图像

javascript - Parse.com 创建指针对象时出错

java - 使用适用于 Android 应用程序的自定义适配器将项目动态添加到 ListView

java - 如何为自定义对话框设置圆角?

c# - 如何将 Lambda 表达式转换为 Sql?

c++ - 与仿函数的函数组合 - 性能开销

java - 使用 Gson 将 ArrayList 转换为字符串