我正在使用一个使用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()提供正确的语法吗?
答案 0 :(得分:1)
你的IDE(以及Groovy编译器)正在抱怨那里的语法。这是一个java8 lamba表达式,Groovy不理解。
您必须使用Groovy闭包,或者使用与Java相同的匿名类(例如8之前)。
E.g。而不是() -> {...}
在这里使用{ -> ... }
。这给你一个没有参数的闭包。 Groovy将做正确的事情"演员"那个单一的方法界面就完成了。
基本的经验法则:移动lambda的args((...)
中的内容;在你的情况下没有任何内容)和->
移动到{}
并删除()
。