我正在尝试使用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)。
答案 0 :(得分:0)
我填补了一个与此有关的错误,并且似乎可以继续进行:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8219318。