Который раз спотыкаюсь на стримы и интерфейсы в Java. Допустим у меня есть интерфейс ToDeString
и класс De
, который его имплементит. Этот класс имеет метод List<De> getList()
, который возвращает объекты этого же класса De
. Затем, я создаю такой стим:
de.getList().stream().map(d->d.getList().stream()).map(s-> streamToDeString(s))
Где String streamToDeString(Stream<ToDeString> stream)
. Но так нельзя. Функция streamToDeString
не принимает стримы типа Stream<De>
, хотя De
наследует ToDeString
.
Разъясните, пожалуйста, что я делаю не так.
Конечно так нельзя ) И ни в одном нормальном языке так нельзя )
Чтобы это работало, вам эту ковариантность нужно явно указать:
String streamToDeString(Stream<? extends ToDeString> stream)
Вы наверное путаете это с такой формой:
String func(ToDeString arg)
- Тогда действительно можно предеавать и наследников тоже.
Собственно само понятие ковариантности позволяет указать что List из наследников тоже будет наследником. Как то так.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите где ошибка? Не получается обработать деление на ноль
Есть такой код для canvas, что бы при прокрутке колесиком мышки, можно было увеличивать или уменьшать содержание canvasНо есть одно но, при увеличении...
Решаю задачу парсинга вакансий с сайта HeadeHunter при помощи jsoup и пытаюсь парсить дату, но получаю ошибку:
Нужно получить значение 3 в результате выполнения следующего кода: Systemout