为什么在Java 8中Stream.sorted不是类型安全的?
- 论坛
- 为什么在Java 8中Stream.sorted不是类型安全的?
19 浏览
为什么在Java 8中Stream.sorted不是类型安全的?
这是来自Oracle JDK 8实现的Stream接口:
public interface Streamextends BaseStream > { Stream sorted(); }
在运行时很容易引发问题,但在编译时不会生成警告。以下是一个示例:
class Foo { public static void main(String[] args) { Arrays.asList(new Foo(), new Foo()).stream().sorted().forEach(f -> {}); } }
这个示例可以编译通过,但在运行时会抛出异常:
Exception in thread "main" java.lang.ClassCastException: Foo cannot be cast to java.lang.Comparable
为什么sorted
方法没有在编译器能够捕捉到此类问题的地方定义呢?也许我错了,但是难道不是这么简单吗:
interface Stream{ > void sorted(C c); }
?
显然,实现这个接口的人(在编程和工程方面远远超过我)一定有一个我看不到的非常好的原因,但是那个原因是什么呢?