java.util.Objects类使用了许多新方法进行了扩展
对象#RequireNonNullElse
分别
java-9
中的对象#RequireNonNullElseget()。
如果第一个参数为非空,则返回第一个参数,否则返回非空的第二个参数或supplier.get()的非空值
jshell> String nullStr = null;
nullStr ==> null
jshell> Objects.requireNonNullElse(nullStr,"lorem ipsum");
$13 ==> "lorem ipsum"
jshell> Objects.requireNonNullElseGet(nullStr,() -> "lorem ipsum");
$14 ==> "lorem ipsum"
但新功能与optional
类中已存在的可选#orelse和可选#orelseget重叠
jshell> Optional.ofNullable(nullStr).orElse("lorem ipsum");
$17 ==> "lorem ipsum"
jshell> Optional.ofNullable(nullStr).orElseGet(() -> "lorem ipsum");
$18 ==> "lorem ipsum"
objects
中的新方法与相应的optional
方法之间的唯一区别是,supplier的第二个参数或值必须是非空的,否则objects
抛出NPE
:
jshell> Objects.requireNonNullElseGet(nullStr,() -> null);
| java.lang.NullPointerException thrown: supplier.get()
| at Objects.requireNonNull (Objects.java:246)
| at Objects.requireNonNullElseGet (Objects.java:321)
| at (#15:1)
jshell> Objects.requireNonNullElse(nullStr,null);
| java.lang.NullPointerException thrown: defaultObj
| at Objects.requireNonNull (Objects.java:246)
| at Objects.requireNonNullElse (Objects.java:301)
| at (#16:1)
相对于可选
jshell> Optional.ofNullable(nullStr).orElse(null);
$19 ==> null
jshell> Optional.ofNullable(nullStr).orElseGet(() -> null);
$20 ==> null
如果我有一个遗留代码,类似于:
String str = null;
String result = str == null ? "other string" : str;
这只是方法内部的一个简单检查。我想用最新的语言特性重新调整它。现在,考虑到optional.orelse
和objects.requirenonnullorelse
之间的区别,哪个更好?
result = Optional.ofNullable(str).orElse("other string");
或
result = Objects.requireNonNullOrElse(str,"other string);
问题内容: 我一直在阅读和学习有关Docker的知识,并试图正确选择要使用的Django设置。到目前为止,有: Docker Compose 或Dockerfile 我了解在中使用了,但是我不确定是否将所有内容放入一个大的Dockerfile中并用多个命令处理不同的映像是否是一个好习惯? 我想使用几个不同的图像,包括: 请提供关于使用 Docker 设置此类环境的最佳实践的建议。 如果有帮助,我在
问题内容: 我知道它们本质上是同一件事,但是就样式而言,哪个是创建空列表或字典的更好(更Pythonic的)? 问题答案: 在速度方面,空列表/字典没有竞争: 对于非空: 另外,使用方括号表示法还可以使您使用列表和字典理解,这可能就足够了。
问题内容: 我已经阅读了很多有关每种方法的优缺点的信息,并且我知道委托通常是针对一个侦听器的,而通知则针对许多侦听器。问题在于性能。 我正在通过通知将麦克风的音频信号发送到另一个班级。我知道在这里我应该使用委托,但我的问题是:委托会更快吗?因为我可以看到我有一些帧速率问题(已减少),并且我想知道原因是否可能是使用通知 而不是 委托,还是没有关系? 问题答案: 代表的开销较少,因此执行速度更快。 但
问题内容: 我仔细研究了它,它看起来非常高效,尤其是对于值小于64的枚举。 基本上,所有集合共享所有可能的枚举值的单个数组,而唯一的另一条信息是位掩码,如果设置为一,则将其设置为。 另一方面,Enum.values()似乎有点黑魔法。此外,它返回一个数组,而不是一个集合,因此在许多情况下,必须用Arrays.asList()装饰它,以便在任何需要集合的地方使用。 那么,应该更可取吗? 更具体地说,
我想知道,以下两种方法中哪一种是声明字典的最佳实践,为什么?
问题内容: 使用哪种更好或更方便: 要么 问题答案: 您是否完全需要类型属性?如果您使用的是HTML5,则不会。否则,是的。HTML 4.01和XHTML 1.0 根据需要指定属性,而HTML5具有可选属性,默认为。HTML5现在得到了广泛的实现,因此,如果您使用HTML5doctype,则是有效且不错的选择。 至于type属性中应该包含的内容,2006年注册的MIME类型旨在替代所有主要浏览器(