Java 表达式用户如何使用->;{some code}是观察者对象吗?
在谷歌的文章中有一个例子,我不明白- UserProfileViewModel: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
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
。