为什么在Java 8中Stream.sorted不是类型安全的?

19 浏览
0 Comments

为什么在Java 8中Stream.sorted不是类型安全的?

这是来自Oracle JDK 8实现的Stream接口:

public interface Stream extends 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);
}

显然,实现这个接口的人(在编程和工程方面远远超过我)一定有一个我看不到的非常好的原因,但是那个原因是什么呢?

0