Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javac:不兼容类型:Mono<;对象>;无法转换_Java_Eclipse_Maven_Mono_Project Reactor - Fatal编程技术网

javac:不兼容类型:Mono<;对象>;无法转换

javac:不兼容类型:Mono<;对象>;无法转换,java,eclipse,maven,mono,project-reactor,Java,Eclipse,Maven,Mono,Project Reactor,有人能解释一下为什么mono1()方法在Eclipse中没有显示错误,并且在Eclipse中运行,但不使用Maven或javac编译吗?为什么Eclipse和Maven/javac中的mono2()方法都可以呢 import java.util.function.Function; import lombok.AllArgsConstructor; import lombok.Data; import reactor.core.publisher.Mono; public class Inc

有人能解释一下为什么
mono1()
方法在Eclipse中没有显示错误,并且在Eclipse中运行,但不使用Maven或
javac
编译吗?为什么Eclipse和Maven/
javac
中的
mono2()
方法都可以呢

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;
    }
}
应该返回
Mono
,并且在我的示例中
T
不应该是
Object

Eclipse中没有错误,当我将鼠标悬停在Eclipse中的
doOnError
上时,它会显示预期的
Mono类型

  • Eclipse版本:Spring工具套件版本:3.9.5.0版本
  • Maven版本:3.5.0
  • maven编译器插件:3.7.0
  • javac版本:1.8.0_171

javac是否也会给您任何原始类型警告?@AndyTurner-不,只是编译器错误。您能否输入一个显式类型提示:
。doError
?也许太长了,读不下去了,因为在Eclipse <代码>中,添加了非泛型方法DOONError的未用类型参数(Euffer-TL;DR),类型推断规则非常复杂,并且在JavaC和Eclipse实现中有不同之处。(关于这两者之间的差异有很多问题)。我认为没有什么好的“理由”;只要按照你找到的解决办法去做就行了。
IncompatibleTypes.java:16: error: incompatible types: Mono<Object> cannot be converted to Mono<A>
                .doOnError(System.err::println);