gpt4 book ai didi

java - 使用 RxJava 运行代码时出现编译错误

转载 作者:行者123 更新时间:2023-12-02 11:53:00 27 4
gpt4 key购买 nike

我是 RxJava 新手,所以请原谅我所有的新手错误;)

我有以下代码:

Observable
.fromIterable( observables )
.flatMap(task -> task.observeOn(Schedulers.computation()))
// wait for all tasks to finish
.lastOrError()
.flattenAsObservable( x -> someWeirdMapWithObject.values())
.cast(BrandBuilder.class)
.map( brandBuilder -> brandBuilder.build() )

observables 是一个 Observables 列表,它将向 someWeirdMapWithObject 写入数据。顾名思义,someWeirdMapWithObject 将 Object 作为值。

奇怪的是,在 Intellij IDEA 中,这段代码可以正常工作,没有错误,没有警告(除了一个 -brandBuilder.build() 可以内联)。但是当我尝试编译此代码时,出现编译错误:

error: cannot find symbol
.map( brandBuilder -> brandBuilder.build() )
^
symbol: method build()
location: variable brandBuilder of type Object

当我将最后一行更改为:

.map( brandBuilder -> ((BrandBuilder) brandBuilder).build() )

一切都很好。

我的问题是:

  • 为什么强制转换运算符不起作用?

  • 我的代码正确吗?有什么办法可以更好地执行它吗?

  • 为什么(引用 Tommy Wiseau:“为什么,Java 为什么?”)这段代码无法编译?

提前感谢您的回复;)

编辑

下面是更好的示例(作为 Junit Test,我注意到当我创建相同类型的可观察量时,此代码将编译,否则不会编译):

@Test
public void test() throws Exception {
Observable<String> first = Observable.fromCallable(() -> "HEY").delay(250, TimeUnit.MILLISECONDS);
Observable<Integer> second = Observable.fromCallable(() -> 1).delay(350, TimeUnit.MILLISECONDS);
List<Observable> observables = com.google.common.collect.Lists.newArrayList(first, second);
Map<Long, Object> someWeirdMapWithObject = com.google.common.collect.ImmutableMap.of(
1L, new BrandBuilder(1),
2L, new BrandBuilder(2)
);
Observable
.fromIterable(observables)
.flatMap(task -> task.observeOn(Schedulers.computation()))
// wait for all tasks to finish
.lastOrError()
.flattenAsObservable(x -> someWeirdMapWithObject.values())
.cast(BrandBuilder.class)
.map(BrandBuilder::build)
.toList().blockingGet();
}

class BrandBuilder{
private int bar;
BrandBuilder(int bar) {
this.bar = bar;
}
public Brand build(){
return new Brand(this.bar);
}
}

class Brand{
private int bar;
Brand(int bar) {
this.bar = bar;
}
}

最佳答案

问题似乎来自此声明中的原始类型:

List<Observable> observables =
com.google.common.collect.Lists.newArrayList(first, second);

这似乎会在下面的流程中抛出 javac 并阻止泛型/推理正常工作。使用

List<Observable<?>> observables =
com.google.common.collect.Lists.newArrayList(first, second);

相反,下面的所有内容都应该编译。

对我来说,最新的 Eclipse 确实指出了编辑器中的问题,突出显示了 ::build 部分,所以我猜 IntelliJ 没有报告错误可能是那里的一个错误。

关于java - 使用 RxJava 运行代码时出现编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47762457/

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