为什么当Eclipse编译器编译时,Maven不编译Guava Table代码? (推断的类型不符合上限)

时间:2019-02-18 12:22:43

标签: java eclipse maven generics guava

我正在尝试使用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

为什么我需要此Broker表进行编译? 最有趣的是,Eclipse编译器以某种方式知道如何处理它。

我使用的是Maven编译器插件版本3.8.0,且 target source 标签设置为1.8。

我觉得这里的工作流程有问题-我正在IDE中进行开发,一切看起来都很好,而且突然之间,我的代码出了点问题,甚至无法编译Maven构建。

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

1 个答案:

答案 0 :(得分:0)

我填补了一个与此有关的错误,并且似乎可以继续进行:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8219318

相关问题