这是来自Oracle JDK 8实现的Stream接口:
public interface Stream<T> extends BaseStream<T, Stream<T>> {
Stream<T> 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<T> {
<C extends Comparable<T>> void sorted(C c);
}
显然,实施这个功能的人(就编程和工程而言,他们比我超前了好几年)一定有我无法理解的很好的原因,但是这个原因是什么呢?
Comparator
吗?已经有 重载 的方法了。不过我不确定你为什么需要C
。 - shmoselT
(这是不可能的),但实际上只是在为一个无用的参数定义了一个类型。 - shmoselsorted
函数不接受任何参数作为输入 - 你从哪里获取这个参数? - Eugene