dro*_*sun 21 java optional guava java-7
我试图找到一种干净,代码高效的转换Optional<Integer>方式Optional<Long>.我正在使用Guava在Java 7中工作.
所以在代码中的一个地方我创建了一个可选的整数
Optional<Integer> optionalInt = Optional.fromNullable(someInt);
Run Code Online (Sandbox Code Playgroud)
在另一个领域,我需要它作为一个可选的长.我能想到的最好的事情是:
Optional<Long> optionalLong = optionalInt.transform(new Function<Integer, Long>() {
@Override
public Long apply(Integer inputInt) {
if (inputInt != null)
return inputInt.longValue();
else
return null;
}
});
Run Code Online (Sandbox Code Playgroud)
但这很麻烦,特别是如果你考虑在我使用原始类型时转换类型是多么容易.
有什么好主意吗?
Bor*_*der 21
遗憾的是,这是Java 7在功能支持方面所能提供的最佳功能.
我只想说transform永远不会被召唤null所以你可以这样做:
Optional<Long> optionalLong = optionalInt.transform(new Function<Integer, Long>() {
@Override
public Long apply(Integer inputInt) {
return inputInt.longValue();
}
});
Run Code Online (Sandbox Code Playgroud)
从文档:
如果实例存在,则使用给定的转换
Function; 否则,absent()退回.如果函数返回null,NullPointerException则抛出a.
所以永远不要null从Function传递回来transform.
如果你重复使用它,那么你可以使用enum单例模式:
public enum IntToLong implements Function<Integer, Long> {
INSTANCE;
@Override
public Long apply(Integer input) {
return input.longValue();
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
optionalInt.transform(IntToLong.INSTANCE);
Run Code Online (Sandbox Code Playgroud)
这显然减少了调用站点的代码,代价是在代码库中有额外的类 - 我不会太担心.
| 归档时间: |
|
| 查看次数: |
11166 次 |
| 最近记录: |