Новая Гуава 10 Необязательно заявляет, что она естественно ковариантна и, следовательно, может быть приведена.
Если я попытаюсь, это выглядит немного уродливо:
Optional<Integer> opti = Optional.of(42);
Optional<Number> optn = (Optional) opti;
Мне нравится видеть некоторые полезные функции, такие как:
static <T> Optional<T> transform(Optional<? extends T> opt, Class<T> clazz);
(как выразить это как функцию-член Optional?)
Можно ли даже определить объект функции преобразования, например:
static <T> Function<Optional<? extends T>, Optional<T>>
transformer(Class<T> class);
для преобразования Collection<Optional<Double>>
в Collection<Optional<Number>>
без создания новых объектов для каждого?
Я думаю, что даже возвращенный объект Function может быть реализован внутренним синглтоном.