Как справиться с классом, который реализует Comparable <?>, А не Comparable <E>?

Я создал обертку Iterator которая возвращает элементы, пока не будет достигнут определенный порог, как показано ниже:

public class MyIterators {
    public static <E extends Comparable<E>> Iterator<E> threshold(final Iterator<? extends E> iterator, final E threshold) {
        ...
    }
}

Я хочу использовать это для Iterator<ChronoZonedDateTime> в служебной функции следующим образом:

public static Iterator<ZonedDateTime> oneYear(final Iterator<ZonedDateTime> iterator) {
    return MyIterators.threshold(iterator, ZonedDateTime.now().plusYears(1));
}

Я получаю:

method threshold in class MyIterators cannot be applied to given types;
[ERROR]   required: java.util.Iterator<? extends E>,E
[ERROR]   found: java.util.Iterator<java.time.chrono.ChronoZonedDateTime>,java.time.ZonedDateTime
[ERROR]   reason: cannot infer type-variable(s) E
[ERROR]     (argument mismatch; java.util.Iterator<java.time.chrono.ChronoZonedDateTime> cannot be converted to java.util.Iterator<? extends java.time.chrono.ChronoZonedDateTime<?>>)

Компилятор ChronoZonedDateTime вместо ZonedDateTime , хотя я вообще не объявляю / не использую этот класс.

Как мне справиться с этим? Я ввел ручное приведение, или все еще есть способ сделать все это безопасным для типа способом?

Я работаю с JDK 8.x.

Всего 1 ответ


Есть идеи?

10000