Я пытаюсь скомпилировать следующий код с 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 с тегами target и source установлен на 1.8.
Мне кажется, что здесь что-то не так в рабочем процессе - я занимаюсь разработкой в IDE, все выглядит хорошо, и неожиданно оказывается, что с моим кодом что-то не таки он даже не компилируется в сборке Maven.
Я пробовал новейшую версию 3.6 Maven, и компилятор Eclipse поставляется с Eclipse 2018-12, как Java 8, так и 11.