Java8 IntStream несовместимый тип возврата для коллекций<Integer>.stream()
Я немного потерян с этим. У меня есть код (который я не писал), который имеет класс с именем BitSetExt, который расширяет BitSet. Подпись выглядит так:
private class BitSetExt extends BitSet implements Set<Integer>
Метод stream() не переопределяется в расширенном классе. Я знаю, что код прекрасно компилируется с Java 1.6. В Eclipse с Java8 я получаю ошибку:
Возвращаемые типы несовместимы для унаследованных методов Collection.stream(), BitSet.stream().
Если я пытаюсь переопределить stream() и изменить тип возвращаемого значения IntStream на что-либо, я получаю другую ошибку и предложение изменить тип возвращаемого значения на IntStream (что, по-видимому, несовместимо). Итак, что я не понимаю и как я могу исправить этот код?
Спасибо за любую помощь.
2 ответа
Начиная с Java 8, BitSet имеет метод, объявленный как
IntStream stream()
а также Set<Integer>
имеет метод с тем же именем, объявленный как
Stream<Integer> stream()
Поскольку эти методы имеют одно и то же имя, но несовместимый тип возвращаемого значения, невозможно расширить BitSet и реализовать Set одновременно.
Вы должны будете реорганизовать класс так, чтобы он не реализовывал Set<Integer>
и, например, добавить метод, который возвращает вид на объект, реализуя Set<Integer>
:
public Set<Integer> asSet();
Этот класс никогда не скомпилируется в Java 8.
Set<Integer>
требует, чтобы вы реализовали метод с подписью
public Stream<Integer> stream();
в то время как BitSet
обеспечивает реализацию с подписью
public IntStream stream();
И IntStream
не является подтипом Stream<integer>
, Не существует типа, который бы удовлетворял обоим требованиям.