Ric*_*ard 6 java optional java-8
我有一个java可选对象,如果它存在,我只想得到它.这里显而易见的代码是:
JsonGenerator gen;
if(value.isPresent()) {
gen.writeObject(value.get());
}
Run Code Online (Sandbox Code Playgroud)
但我想知道我是否可以通过该ifPresent方法将其转换为1行.如果不存在,我根本不想写它.我试过这样的事情:
gen.writeObject(value.ifPresent(a -> a));
Run Code Online (Sandbox Code Playgroud)
但这显然不起作用.有什么办法可以做我想要的吗?我在网上研究的所有内容都只显示了ifPresent对谓词的方法调用的使用.
编辑1: 我尝试了Tunaki的解决方案但是我收到以下错误:
Error:(25, 46) java: incompatible thrown types java.io.IOException in method reference
Run Code Online (Sandbox Code Playgroud)
这是我的整个代码块:
public class FooSerializer extends JsonSerializer<Foo> {
@Override
public void serialize(Foo value,
JsonGenerator gen,
SerializerProvider serializers) throws IOException {
value.getFooA().ifPresent(gen::writeObject);
}
}
Run Code Online (Sandbox Code Playgroud)
我甚至尝试过:
public class FooSerializer extends JsonSerializer<Foo> {
@Override
public void serialize(Foo value,
JsonGenerator gen,
SerializerProvider serializers) throws IOException {
try {
value.getContactInfo().ifPresent(gen::writeObject);
} catch(IOException e) {
throw new UncheckedIOException(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但它仍然给我错误.
Tun*_*aki 14
您可以在以下位置调用gen.writeObject您的对象的使用者ifPresent:
value.ifPresent(gen::writeObject);
Run Code Online (Sandbox Code Playgroud)
仅当Optional非空时才会调用该方法.
在您的示例中,该方法writeObject抛出已检查的异常IOException; 你将需要捕获它并且要么抛出一个运行时异常(比如new UncheckedIOException,这会使代码变得复杂)或者做一些其他事情(比如记录它):
value.ifPresent(v -> {
try {
gen.writeObject(v);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
792 次 |
| 最近记录: |