Can';在Java8中,我无法理解一些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

我有一段代码,看起来像这样,没有使用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.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(..)