Для установки, у меня есть:Generic параметр возвращает List <ChildInterface> в потоке, но прямой метод возвращает список вызовов <Parent>
interface Parent
interface Child1 extends Parent
interface Child2 extends Parent
И в другом месте у меня есть:
public class MyClass {
private List<Child1> child1List = new ArrayList<>();
public List<Parent> getChild1List(Contact contact) {
return child1List.parallelStream()
.filter(m -> m.getContacts().contains(contact))
.sorted(Comparator.comparing(Parent::getParentField))
.collect(Collectors.toList());
}
}
Когда я это делаю это way, getChild1List возвращает List<Parent>
(не должен ли он возвращаться List<Child1>
?)
Позже, я обнаружил, что поток полезен для других методов, поэтому я ext и он создал общий метод. У меня есть несколько интерфейсов, которые расширяют Parent, так что я следующим образом:
private <T extends Parent> List<T> returnsListByContact(List<T> childList, Contact contact) {
return childList.parallelStream()
.filter(m -> m.getContacts().contains(contact))
.sorted(Comparator.comparing(Parent::getParentField))
.collect(Collectors.toList());
}
и getChild1List(Contact contact)
стали:
public List<Parent> getChild1List(Contact contact) {
return returnsListByContact(child1List, contact);
}
, но теперь это не нравится, ссылаясь, что getChild1List возвращается в List<Child1>
. Я не понимаю, почему, поскольку реализация потока не была изменена вообще, за исключением того, что дочерний список, который запускает его, прошел через общий параметр, а не прямой вызов в поле частного члена MyClass.
Так почему же они возвращают две разные вещи?
Я исправил форматирование. Используйте обратные кавычки для кода, который является встроенным, и отступ на четыре пробела для форматирования блока кода. Если вы хотите, чтобы код показывал отступ в четыре пробела, вам нужно добавить четыре пробела, чтобы отформатировать его как блок кода, а затем добавить * дополнительные * четыре пробела для видимости отступа. Не используйте вкладки. –
Спасибо! Я не мог понять, как заставить блоки оставаться твердыми при написании нескольких строк. – NateH06