【问题标题】:Why does Maven not compile the Guava Table code when Eclipse compiler does? (inferred type does not conform to upper bound(s))为什么 Maven 不编译 Guava Table 代码而 Eclipse 编译器编译? (推断类型不符合上限)
【发布时间】:2019-02-18 12:22:42
【问题描述】:

我正在尝试使用 Maven 编译以下代码:

  final Table<Integer, Integer, Integer> destination = HashBasedTable.create();
  final Map<Integer, Integer> source = new HashMap<>();

  // compiles
  final Table<Integer, Integer, Integer> broker =
           source.entrySet().stream().collect( Tables.toTable( e -> 0, e -> 0, e -> 0,
                    ( e1, e2 ) -> 0, HashBasedTable::create ) );
  destination.putAll( broker );

  // doesn't compile
  destination.putAll( source.entrySet().stream().collect( Tables.toTable( e -> 0, e -> 0,
           e -> 0, ( e1, e2 ) -> 0, HashBasedTable::create ) ) );

结果是错误的:

incompatible types: inferred type does not conform to upper bound(s)
inferred: com.google.common.collect.Table<java.lang.Object,java.lang.Object,java.lang.Object>
upper bound(s): com.google.common.collect.Table<java.lang.Object,java.lang.Object,java.lang.Object>,com.google.common.collect.Table<? extends java.lang.Integer,? extends java.lang.Integer,? extends java.lang.Integer>,java.lang.Object

为什么我需要这个代理表来编译? 最有趣的是 Eclipse 编译器知道如何处理它。

我正在使用 Maven 编译器插件版本 3.8.0,其中 targetsource 标签设置为 1.8。

我觉得这里的工作流程有问题 - 我在 IDE 中开发,一切看起来都很好,但突然间发现我的代码有问题,甚至无法编译Maven 构建。

我尝试了最新的 3.6 Maven 版本,Eclipse 编译器来自 Eclipse 2018-12,Java 8 和 11。

【问题讨论】:

  • 你是如何在你的 pom.xml 中配置 maven-compiler-plugin
  • Eclipse 编译器允许您通过在运行时(而不是编译时)制作故障清单来编译无效代码。当试图运行用 Eclipse 编译器编译的无效代码时,会抛出一些错误。当你运行指定的代码时,你会得到这样的错误吗?
  • @HRgiger 我在问题中包含了相关信息。
  • Maven 使用javac,而 Eclipse 有自己的编译器。 Here is a similar issue (generic parameter types with bounds) where IMHO Eclipse is right。 Maven 构建中究竟使用了哪个 JDK? Oracle JDK 11.0.2?
  • @Line 如果 Oracle JDK 11.0.2 也失败,请确保 Oracle 知道该问题。作为解决方法,请在您的代码中避免这种情况,或者在您的 Maven 构建中使用 Eclipse 编译器。

标签: java eclipse maven generics guava


【解决方案1】:

我为此填写了一个错误,并且似乎正在继续:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8219318

【讨论】:

    猜你喜欢
    • 2012-02-14
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    相关资源
    最近更新 更多