У меня есть 2 классов:Java-общий вывод слишком широк?
class M {
public <R, A, T extends A> A walk(BiFunction<Widget, Integer, Stream<R>> walker, BiFunction<A, Stream<R>, T> accF, A acc, int level) {
return accF.apply(acc, walker.apply(this, level));
}
}
и
class N extends M {
public Stream<M> getChildren() {return Stream.of(new M()...);}
@Override
public <RR, A, T extends A> T walk(BiFunction<Widget, Integer, Stream<RR>> walker, BiFunction<A, Stream<RR>, T> accF, A acc, int level) {
return accF.apply(accF.apply(acc, walker.apply(this, level)), getChildren().map(o -> o.walk(walker, accF, acc, level + 1)));
}
}
Однако компилятор говорит на o.walk(walker, accF, acc, level + 1)
что inference variable T has incompatible bounds: equality constraints: T upper bounds: A, Object, RR
Почему так и как это исправить?
Это ваш путь к тому, как сделать кому-то день несчастным? –
@MuratK. heheh :) ну, может быть, это выглядит немного сложным ... но это всего лишь рекурсивный посетитель дерева .. и что касается типа здесь, это довольно обычное явление в программировании Scala .. не воспринимается как нечто вне мира. idk для Java хотя .. – noncom
Можете ли вы сделать его компилируемым ** кроме ** для фактической ошибки в quesiton? То есть что такое «Виджет» и «...»? – Marco13