我正在流式传输实现接口的类的对象。我想将它们收集为接口元素的列表,而不是实现类。
这对于 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 中的类接口列表?
如果有人有比明确铸造更好的解决方案,我也很乐意听到:)