使用Groovy应用程序中的RxJava fromCallable()方法进行IntelliJ编译错误?

时间:2017-11-04 23:00:12

标签: java spring-boot intellij-idea groovy rx-java

我正在使用一个使用RxJava 1.0的Spring启动应用程序,我使用Groovy编程语言使用IntelliJ IDE构建它。我似乎无法接受我的 Observable.fromCallable()调用的语法,如下所示。我正在使用我在 fromCallable()方法的示例中看到的确切语法,虽然来自Java示例而不是Groovy,因为我似乎无法找到任何Groovy示例。这是我的代码:

.doOnNext
{
    // Emit an observable that waits for the call in the closure passed to fromCallable().
    Observable.fromCallable( () -> { httpCallThatReturnsAnObservable() })
}

我在匿名方法的头部右侧的paren “)”后面的光标位置和身体前面的“>”字符后面出现错误关闭,在我在下面的行中放置下划线的位置:

()_->_ { }

第一个错误是:

Expression expected. ')' or ',' expected.

第二个错误只是:

')' or ',' expected.

注意, httpCallThatReturnsAnObservable()返回一个Observable。

我正在使用 fromCallable()因为我读过的博客文章表明它是使用而不是使用 defer()方法或使用可阻挡的Observable。我也被一位同事警告过,不要在spring boot app中的控制器中使用 defer(),而当前代码不是控制器的一部分

有人可以使用Groovy为 fromCallable()提供正确的语法吗?

1 个答案:

答案 0 :(得分:1)

你的IDE(以及Groovy编译器)正在抱怨那里的语法。这是一个java8 lamba表达式,Groovy不理解。

您必须使用Groovy闭包,或者使用与Java相同的匿名类(例如8之前)。

E.g。而不是() -> {...}在这里使用{ -> ... }。这给你一个没有参数的闭包。 Groovy将做正确的事情"演员"那个单一的方法界面就完成了。

基本的经验法则:移动lambda的args((...)中的内容;在你的情况下没有任何内容)和->移动到{}并删除()