gpt4 book ai didi

java - (RxJava) 移植的 Groovy 方法不起作用

转载 作者:搜寻专家 更新时间:2023-11-01 08:48:17 30 4
gpt4 key购买 nike

我正在将用 Java 编写的 Android 应用程序移植到 Groovy。我正在尝试使用 Groovy 闭包,但它不起作用。编译和运行时没有错误,但没有任何反应。

这是行不通的版本。

    Observable.create({
Subscriber<Bin> subscriber ->
new Thread(new Runnable() {
@Override
void run() {
List<List<String>> lists = binData.getData()
for (List<String> strings : lists) {
try {
Bin bin = ... // shorten for brevity
subscriber.onNext(bin)
} catch (Exception ex) {}
}
subscriber.onCompleted()
}
}).start()
})

这个版本工作正常。它是有效的 Groovy,但有点冗长。

    Observable.create(new Observable.OnSubscribe<Bin>() {
@Override
public void call(final Subscriber<? super Bin> subscriber) {
final Thread t = new Thread(new Runnable() {
@Override
public void run() {
List<List<String>> lists = binData.getData();
for (List<String> strings : lists) {
try {
Bin bin = ... // shorten for brevity
subscriber.onNext(bin)
} catch (Exception ex) {}
}
subscriber.onCompleted()
}
})
t.start()
}
})

我想这与闭包或类型有关,但我想不通。任何的想法?谢谢!

我遵循的示例位于 https://github.com/ReactiveX/RxJava/wiki/How-To-Use-RxJava#asynchronous-observable-example .

最佳答案

Groovy 2.2 之前, 必须显式强制关闭以替代特定类型。即使在 2.2 之后,也可能存在边缘情况(例如 generic parameters ),其中隐式强制转换完全无法按预期工作。

要强制执行,请应用 as 运算符。您还可以将匿名 Runnable 替换为闭包:

Observable.create({ Subscriber<Bin> subscriber ->
new Thread({ ->
List<List<String>> lists = binData.getData()
... // shorten for brevity
} as Runnable).start()
} as Observable.OnSubscribe<Bin>)

关于java - (RxJava) 移植的 Groovy 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26090367/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com