我有这样的代码片段,而无需使用lambda表达式:
.map(new Function, List>() {
@Override
public List apply(List posts) throws Exception {
return realm.where(Post.class).equalTo(DatabaseContract.PostTable.USER_ID, userId).findAll();
}
})
.onErrorResumeNext(new Function>>() {
@Override
public ObservableSource extends List> apply(Throwable throwable) throws Exception {
Log.d("rafael", throwable.getMessage());
return getLocalPostsObservable(userId, page);
}
})
使用lambda表达式(使用Intellij功能进行转换),它变为:
.map((Function, List>) posts -> realm.where(Post.class).equalTo(DatabaseContract.PostTable.USER_ID, userId).findAll())
.onErrorResumeNext(throwable -> {
Log.d("rafael", throwable.getMessage());
return getLocalPostsObservable(userId, page);
})
我不明白为什么map()中的类型从帖子转换为Function< List< Post>,List< Post>>在
(Function, List>) posts -> realm.where(Post.class).equalTo(DatabaseContract.PostTable.USER_ID, userId).findAll()
同时在第二个表达式中没有类型转换:
throwable -> {
Log.d("rafael", throwable.getMessage());
return getLocalPostsObservable(userId, page);
}
解决方法:
What’s the return type of findAll()?
我根据Function< S,T>的返回类型在List< Post>上下注.
我的猜测是转换为Function< S,T>应用于整个lambda表达式,不仅应用于posts参数,也不应用于其返回值.
至于其存在的原因,可能是避免对map(FunctionLike< S,T>)的歧义调用.否则,这将不是代码生成工具第一次添加一些无用的东西.
标签:java-8,intellij-idea,casting,java,lambda
来源: https://codeday.me/bug/20191111/2018870.html