微信公众平台推广费用,抖音seo排名系统,怎么查名字有没有被注册商标,莒县网页设计总览 在Java 8中#xff0c;您可以返回Optional而不是返回null。 就像您在Java 7中所做的那样。这取决于您是否倾向于忘记检查null还是使用静态代码分析检查对nullalbe的引用#xff0c;这可能有很大的不同。 但是#xff0c;还有一种更引人注目的情况是将Optional视为具有… 总览 在Java 8中您可以返回Optional而不是返回null。 就像您在Java 7中所做的那样。这取决于您是否倾向于忘记检查null还是使用静态代码分析检查对nullalbe的引用这可能有很大的不同。 但是还有一种更引人注目的情况是将Optional视为具有0或1值的Stream。 简单的可选用例 在Java 7的旧时代中您将编写如下内容 String text something();
if (text ! null) { 注意 Oracle Java 7将在2015年4月“公开更新结束”。 使用Optional可以编写 Optional text something();
if (text.isPresent()) {String text2 text.get(); 但是如果您偏执狂您可能会写。 Optional text something();
if (text ! null text.isPresent()) {String text2 text.get(); 如果您的项目中经常出现NullPointerException错误则Optional可能会有所帮助但否则看起来并没有太大帮助。 一个更复杂的例子 让我们考虑一下这个例子 static String getFirstSecondThird(Nested nested) {try {return ((Contained2) nested.first.second).get(0).third;} catch (NullPointerException | ClassCastException | IndexOutOfBoundsException ignored) {return null;}
} 这真的很丑。 您可以构建一长串条件检查而不是捕获异常但要查看要执行的操作却变得非常困难。 可选允许您处理所有可能的错误情况而无需使用Exception或嵌套的if / else逻辑。 static Optional getFirstSecondThird(Optional nested) {return nested // could be non-present.map(x - x.first) // could be null.map(x - x.second) // could be null// could be another type.map(x - x instanceof Contained2 ? (Contained2) x : null).map(x - x.list) // could be null.filter(x - !x.isEmpty()) // could be empty.map(x - x.get(0)) // could be null.map(x - x.third); // could be null.
} 我们得到的是一系列映射和过滤器它们只有在值非空且存在的情况下才进行。 如果任何值为null或过滤器为true则整个结果为“不存在”。 结论 使用Optional是一种以安全的方式导航复杂数据结构的有效方法。 lambda的目的是减少样板代码并在这种情况下避免了所有检查或错误。 额外 为了您的兴趣这是我在上面的示例中使用的类。 static class Nested {Contained first;
}static class Contained {IContained2 second;
}interface IContained2 {
}static class Contained2 implements IContained2 {List list;
}static class Data {String third;
}翻译自: https://www.javacodegeeks.com/2015/02/java-8-optional-is-not-just-for-replacing-a-null-value.html