Can';在Java8中,我无法理解一些lambda表达式
我有一段代码,看起来像这样,没有使用lambda表达式:Can';在Java8中,我无法理解一些lambda表达式,java,intellij-idea,lambda,casting,java-8,Java,Intellij Idea,Lambda,Casting,Java 8,我有一段代码,看起来像这样,没有使用lambda表达式: .map(new Function<List<Post>, List<Post>>() { @Override public List<Post> apply(List<Post> posts) throws Exception { return realm.where(Post.class).equalTo(DatabaseContract.Po
.map(new Function<List<Post>, List<Post>>() {
@Override
public List<Post> apply(List<Post> posts) throws Exception {
return realm.where(Post.class).equalTo(DatabaseContract.PostTable.USER_ID, userId).findAll();
}
})
.onErrorResumeNext(new Function<Throwable, ObservableSource<? extends List<Post>>>() {
@Override
public ObservableSource<? extends List<Post>> apply(Throwable throwable) throws Exception {
Log.d("rafael", throwable.getMessage());
return getLocalPostsObservable(userId, page);
}
})
其中,第二个表达式中没有类型转换:
throwable -> {
Log.d("rafael", throwable.getMessage());
return getLocalPostsObservable(userId, page);
}
findAll()
的返回类型是什么
根据函数
的返回类型,我会在列表
上下注
我的猜测是,cast to函数
应用于整个lambda表达式,不仅应用于posts
参数,也应用于其返回值
至于它出现的原因,可能是为了避免对
map(FunctionLike)
的不明确调用;否则,代码生成工具将不会是第一次添加一些无用的东西。铸造的不是帖子
,但是整个lambda表达式,因为它没有编译失败,我们可以推断posts
实际上是List
类型,并且findAll
也返回List
可能是因为以下链接方法:
where(..).equalTo(..).findAll(..)
您可以在返回
List
的方法中获取该代码,并在lambda表达式中使用该方法来测试是否存在这种情况。如果intelli没有添加强制转换,那么问题就存在了 你试过去掉石膏吗?findAll()
的返回类型是什么?@shmosel奇怪的是,当我删除强制转换时,它不会抱怨什么,findAll()
返回RealmResults
在某些情况下,编译器的类型推断需要帮助,一种方法是提供强制转换上下文。如果您可以毫无问题地删除强制转换,情况并非如此,但谁知道,IntelliJ的宏使用哪个启发式宏来决定是否插入此类强制转换…
throwable -> {
Log.d("rafael", throwable.getMessage());
return getLocalPostsObservable(userId, page);
}
where(..).equalTo(..).findAll(..)