Это из интерфейса Stream из реализации Oracle JDK 8:
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);
}
?
Очевидно, что у ребят, которые это реализуют (которые на несколько лет впереди меня, если учесть программирование и инжиниринг), должна быть очень веская причина, которую я не вижу, но что это за причина?