- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个修改器方法,它只设置参数中提供的非空字段。该参数返回裸引用,而不是 Optional
包装器,并且无法更改。
在 Java 8 之前,一种方法是:
Double h = arg.getH();
if ( null != h ) setH( h );
Double v = arg.getV();
if ( null != h ) setV( v );
String s = arg.getS();
if ( null != s ) setS( s );
// Etc. ...
从 Java 8 开始,可以用一次性 Optional
更简洁地表达这一点。
Optional.ofNullable( arg.getH()).ifPresent( this::setH );
Optional.ofNullable( arg.getV()).ifPresent( this::setV );
Optional.ofNullable( arg.getS()).ifPresent( this::setS );
// Etc. ...
这个成语不太熟悉。但是,它也消除了潜在的错误源——例如上面“Java 8 之前”代码中的错误。
问题:频繁使用这种新模式是否有任何负面影响?(例如,它与早期模式相比在编译大小或性能方面如何? )
最佳答案
显然,您的任务是调整您的类型实例以反射(reflect)您无法控制的类型的属性。 (我有点担心//etc
注释。)在那种情况下,我们可以将“transfer this property, if not null
”封装为一个操作它是自己的:
// in MyType
static <T> BiConsumer<TypeOfArg,MyType> transfer(
Function<TypeOfArg,T> from, BiConsumer<MyType,T> to) {
return (arg,myself) -> {
T value = from.apply(arg);
if(value!=null) to.accept(myself, value);
};
}
static final BiConsumer<TypeOfArg,MyType> TRANSFER_ALL_PROPERTIES =
transfer(TypeOfArg::getH, MyType::setH).andThen(
transfer(TypeOfArg::getV, MyType::setV).andThen(
transfer(TypeOfArg::getS, MyType::setS)));
void mutatorMethod(TypeOfArg arg) {
TRANSFER_ALL_PROPERTIES.accept(arg, this);
}
我很确定,这也可能会引发关于这是否比 get
-if
-set
的普通序列更好的争论> 像您的第一个变体一样调用,但我认为,这也与熟悉度有很大关系。
对我来说,transfer(TypeOfArg::getV, MyType::setV)
比 Optional.ofNullable( arg.getV()).ifPresent( this::setV ) 更能表达意图
,读起来仍然很像命令式语句。
对于那些关心临时对象的人来说,代码不会创建任何对象。
关于java - 用 Optional.ofNullable(...).ifPresent(...) 替换 get/test/set of bare references?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37707292/
这个问题在这里已经有了答案: How to convert Optional to Optional [closed] (3 个答案) 关闭 2 年前。 我正在尝试在 Optional.OfNull
我想知道使用Optional.ofNullable()是否有退出 for(String name: names){ if(name != null) person = "Mr./Mrs.
我可以使用 Java8 提取特定部分,如下所示 request.getBody() .getSections() .filter(section -> "name".equ
我想知道使用Optional.ofNullable()是否有退出 for(String name: names){ if(name != null) person = "Mr./Mrs.
有时我得到的值为 [null]对于 List employees 。为了防止我执行以下检查 List employees …. if((employees.size()>0 && employees.
我有一种方法来验证电子邮件的收件人。 在我的代码中 .map(Recipient::getId) 产生错误: Non static method cannot be reference from a
哪种空检查更可取? Optional.ofNullable(port).ifPresent(settings::setPort); 或 if (port != null) { settings.
我对 Optional.ofNullable 方法感到惊讶。有一天我写了一个应该返回 Optional 的函数: private Optional extractFirstValueFrom(Insi
我有一个嵌套类结构,用于反序列化我的数据: Class A has a single property that is an object of Class B (say b) Class B has
此 using optionals correctly is not optional 中的第 12 项文章状态 Sometimes, we tend to "over-use" things. Me
java.util Optional.ofNullable 是否与 Mockito 一起正常工作? 在代码执行过程中,我遇到了这样的事情: User user = Optional.ofNullabl
考虑这个表达式的用法: String hi = Optional.ofNullable(sayHi()).orElse("-"); 有效对应于这个三元表达式: String hi = sayHi()
没有的原因是什么: OptionalInt.ofNullable(Integer); 如果您想将可选/可为空的 Integer 转换为 OptionalInt,这似乎是一个完美的选择。我目前正在使用我
首先,我知道这两种方法的区别。 Optional.of : 用于保证不存在null,如果输入null,nullPointExcepction Optional.ofNullable :可能为空,也可能
我正在开发一个java应用程序,我发现了这两个选项: 一个是jdk原生的Optional.ofNullable,另一个是来自guava库的Optional.fromNullable。 简单来说,它们的
我对 Java 8 可选有疑问。 下面的代码给出编译错误: Integer number = Optional.ofNullable(new Integer(10)); 但是当我们执行以下操作时,它不
这个问题已经有答案了: Optional.of(null)will throw NPE, I need to verify null before call the method? (2 个回答) 已
这个问题在这里已经有了答案: Uses for Optional (14 个答案) 关闭 5 年前。 我最近看到一个blog post ( tweeted by @java ) 这表明以下代码正变得
我注意到如果我按以下方式使用 Optional: Object returnValue = Optional.ofNullable(nullableValue) .map(nonNu
我有一个关于 Java 8 的问题 Optional ,其目的是解决 NullPointerException 异常。 问题是,让我们选择两种类型的原因是什么: Optional.of(T value
我是一名优秀的程序员,十分优秀!