Ответ 1
TL; DR: В Java 7, No.
К сожалению, это лучшая Java 7, предлагающая с точки зрения поддержки функций.
Я бы сказал, что transform
никогда не будет вызываться с помощью null
, чтобы вы могли:
Optional<Long> optionalLong = optionalInt.transform(new Function<Integer, Long>() {
@Override
public Long apply(Integer inputInt) {
return inputInt.longValue();
}
});
Из документация:
Если экземпляр присутствует, он преобразуется с данным
Function
; в противном случае возвращаетсяabsent()
. Если функция возвращаетсяnull
, aNullPointerException
.
Так никогда не возвращать null
из Function
, переданного в transform
.
Если вы многократно его используете, вы можете использовать шаблон enum
singleton:
public enum IntToLong implements Function<Integer, Long> {
INSTANCE;
@Override
public Long apply(Integer input) {
return input.longValue();
}
}
Тогда:
optionalInt.transform(IntToLong.INSTANCE);
Это, очевидно, уменьшает код на сайте вызова за счет наличия дополнительных классов в базе кода - я бы не стал слишком беспокоиться.