Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 表达式用户如何使用->;{some code}是观察者对象吗?_Java_Android_Lambda_Observer Pattern_Android Architecture Components - Fatal编程技术网

Java 表达式用户如何使用->;{some code}是观察者对象吗?

Java 表达式用户如何使用->;{some code}是观察者对象吗?,java,android,lambda,observer-pattern,android-architecture-components,Java,Android,Lambda,Observer Pattern,Android Architecture Components,在谷歌的文章中有一个例子,我不明白- UserProfileViewModel: public class UserProfileViewModel extends ViewModel { private LiveData<User> user; public LiveData<User> getUser() { return user; } } @Override public void onActivityCreated(@N

在谷歌的文章中有一个例子,我不明白-

UserProfileViewModel:

public class UserProfileViewModel extends ViewModel {
    private LiveData<User> user;
    public LiveData<User> getUser() {
        return user;
    }
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    viewModel.getUser().observe(this, user -> {
      // Update UI.
    });
}
当我查看参考时,只有以下
observe
方法:

observe(LifecycleOwner owner, Observer<T> observer)
观察(生命周期所有者、观察者)
我很困惑,方法签名不匹配:

LifecycleOwner
是支持库
Fragment
,好的


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

表达式
user->{some code}
是一个SAM(单一抽象方法)类型,这里有更多信息

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

viewModel.getUser().observe(this, new Observer<User>() {
    @Override
    public void onChanged(@Nullable User user) {
        // Some code
    }
});
viewModel.getUser().observe(这个,新的观察者(){
@凌驾
公共void onChanged(@Nullable User){
//一些代码
}
});

表达式
user->{some code}
是一种SAM(单一抽象方法)类型,更多信息请参见

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

viewModel.getUser().observe(this, new Observer<User>() {
    @Override
    public void onChanged(@Nullable User user) {
        // Some code
    }
});
viewModel.getUser().observe(这个,新的观察者(){
@凌驾
公共void onChanged(@Nullable User){
//一些代码
}
});

这是一个Java 8 lambda表达式,编译器将其转换为
观察者
接口的实现。这是一个
用户
。lambda表达式将被转换为
观察者
,因为这是一个
LiveData
,而
用户
被传递到由lambda表达式主体形成的
onChanged()
方法中。观察者有一个,因此可以用lambda进行实例化。@AlexanderFarber事实上是,它是
User-User->{some-code}
@AlexanderFarber,代码是
viewModel.getUser()。观察(这个,User->{…})
getUser()
的返回类型是
LiveData
getUser()
是公共的。而且,为了获得许可,
user->{some code}
与成员
user
在成员名称方面没有任何关系。它可以被命名为任何东西,例如
u->{…}
几乎是一样的。不过,在这种情况下,类型始终是
User
。这是一个Java 8 lambda表达式,编译器将其转换为
Observer
接口的实现。这是一个
User
。lambda表达式将被转换为
观察者
,因为这是一个
LiveData
,而
用户
被传递到由lambda表达式主体形成的
onChanged()
方法中。观察者有一个,因此可以用lambda进行实例化。@AlexanderFarber事实上是,它是
User-User->{some-code}
@AlexanderFarber,代码是
viewModel.getUser()。观察(这个,User->{…})
getUser()
的返回类型是
LiveData
getUser()
是公共的。而且,为了获得许可,
user->{some code}
与成员
user
在成员名称方面没有任何关系。它可以被命名为任何东西,例如
u->{…}
几乎是一样的。但是,在这种情况下,类型始终是
User