Почему я не могу повлиять на список к переменной списка типа <интерфейс>?JAVA

Программисты JAVA общаются здесь
Anonymous
Почему я не могу повлиять на список к переменной списка типа <интерфейс>?

Сообщение Anonymous »

У меня есть интерфейс I, который реализован двумя классами C1 и C2.

Код: Выделить всё

// works, of course
List list = List.of(new C1());
List list = List.of(new C1()).stream().toList();

// works, too, but why, considering the ones below that don't?
List list = List.of(new C1());

// doesn't compile, why?
List list = List.of(new C1()).stream().toList();
List list = List.of(new C2()).stream().toList();

// but this works, why?
List list = List.of(new C2()).stream().collect(Collectors.toList());

// works, again why?
List list = new ArrayList();
List.of(new C1()).stream().forEach(c1 -> list.add(c1)).toList();

// works
List list = List.of(new C1(), new C2()).stream().toList();
< /code>
Я не понимаю, почему строки 4, 5 не компилируются, пока это делают 3, 6, 7. Оба должны компилировать, или нет. Например: < /p>
private Stream aa() {
return Stream.of(new C1()); // works
return List.of(new C1()).stream() // doesn't
return List.of(new C1()).stream().map(a->a) // works, why?
}
Если я изменяю тип возврата на потоковую передачу , компилятор в порядке, поэтому он понимает, что я фактически возвращаю только C1 в своем потоке, но иногда он заставляет меня, а другие - нет. Почему?

Подробнее здесь: https://stackoverflow.com/questions/796 ... tinterface

Вернуться в «JAVA»