为什么我不能使用 Stream#toList 在 Java 16 中收集类接口的列表?
我正在流式传输实现接口的类的对象。我想将它们收集为接口的元素列表,而不是实现类。
使用Java 16.0.1的方法,这似乎是不可能的。例如,在下面的代码中,最后一个语句将无法编译。Stream#toList
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class WhyDodo {
private interface Dodo { }
private static class FancyDodo implements Dodo { }
public static void main(String[] args) {
final List<Dodo> dodos = Stream.of(new FancyDodo()).collect(Collectors.toList());
final List<FancyDodo> fancyDodos = Stream.of(new FancyDodo()).toList();
final List<Dodo> noFancyDodos = Stream.of(new FancyDodo()).toList();
}
}
我们可以将每个元素显式地从 转换为 。但至少为了简洁起见,我们也可以使用 。FancyDodo
Dodo
.collect(Collectors.toList())
为什么我不能使用 Stream#toList 在 Java 16 中收集类接口的列表?
如果有人有比明确选角更好的解决方案,我也很乐意听到:)