有人可以解释为什么mono1()
方法在Eclipse中没有显示错误,并且可以在Eclipse中运行,但是不能与Maven或javac
一起编译吗?为什么在Eclipse和Maven / mono2()
中都可以使用javac
方法呢?
import java.util.function.Function;
import lombok.AllArgsConstructor;
import lombok.Data;
import reactor.core.publisher.Mono;
public class IncompatibleTypes {
public static void main(String[] args) {
mono1().doOnNext(a -> System.out.println("mono1: " + a)).subscribe();
mono2().doOnNext(a -> System.out.println("mono2: " + a)).subscribe();
}
static Mono<A> mono1() {
return Mono.just("mono1")
.flatMap(flatMapper(A.class))
.doOnError(System.err::println); // Maven/javac errors on this line
// Eclipse is fine with it
}
static Mono<A> mono2() {
Mono<A> mono = Mono.just("mono2")
.flatMap(flatMapper(A.class)); // compiles fine in Eclipse, Maven, javac
mono = mono.doOnError(System.err::println);
return mono;
}
static <R> Function<? super String, ? extends Mono<? extends R>> flatMapper(Class<R> clazz) {
return (str) -> {
A a = new A(str);
return Mono.just((R) a);
};
}
@Data
@AllArgsConstructor
static class A {
private String name;
}
}
这是来自Maven和/或javac
的错误:
IncompatibleTypes.java:16: error: incompatible types: Mono<Object> cannot be converted to Mono<A>
.doOnError(System.err::println);
doOnError()
应该返回Mono<T>
,在我的示例中,T
不应为Object
。
Eclipse中没有错误,当我将鼠标悬停在Eclipse上的doOnError
上时,它显示了预期的Mono<A>
类型(而不是Mono<Object>
):