Я играл со следующим вопросом: Используя необязательный вариант Java 8 с Stream:: flatMap и хотел добавить метод к пользовательскому Optional<T>, а затем проверить, если это сработало.
Точнее, я хотел добавить stream() в мой CustomOptional<T>, который возвращает пустой поток, если значение отсутствует, или поток с одним элементом, если он присутствует.
Однако я пришел к выводу, что Optional<T> объявляется окончательным.
Почему это так? Есть множество классов, которые не объявлены окончательными, и я лично не вижу здесь причины объявлять Optional<T> final.
Изменить, как второй вопрос, почему все методы не могут быть окончательными, если беспокоиться о том, что они будут переопределены и оставить класс не окончательным?