如何更好地使用Java 8的Optional

2025-05-12 01:48:30
推荐回答(2个)
回答1:

Java 8中的Optional是一个可以包含或不可以包含非空值的容器对象,在 Stream API中很多地方也都使用到了Optional。
  java中非常讨厌的一点就是nullpoint,碰到空指针就会出错抛Exception,然后需要逐行检查是哪个对象为空,带来大量的不必要精力损耗,抛出NPE错误不是用户操作的错误,而是开发人员的错误,应该被避免,那么只能在每个方法中加入非空检查,阅读性和维护性都比较差。
  如下面这个代码的手工非空检查:
public void addAddressToCustomer(Customer customer, Address newAddress){ if ( customer == null || newAddress == null) return; if ( customer.getAddresses() == null ){ customer.setAddresses ( new ArrayList<>()); } customer.addAddress(newAddress);}

  另外还有一些开发人员喜欢通过非空检查来实现业务逻辑,空对象不应该用来决定系统的行为,它们是意外的Exceptional值,应当被看成是错误,而不是业务逻辑状态。
  当我们一个方法返回List集合时,应该总是返回一个空的List,而不是Null,这就允许调用者能够遍历它而不必检查Null,否则就抛出NPE。
  但是如果我们根据标识键ID查询数据库,没有查到,需要返回一个空对象怎么办?有人建议抛出Exception,其实这不符合函数方法一进一出的原则,变成一个函数方法有两个返回,一个是正常返回,一个出错Exception,函数式编程范式告诫我们不要轻易抛Exception。
  这时Java 8的Optional就发挥作用了,允许我们返回一个空的对象。
  Optional有方法 isPresent() 和 get() 是用来检查其包含的对象是否为空或不是,然后返回它,如:
Optional someValue = someMethod();
if (someValue.isPresent()) { // check
someValue.get().someOtherMethod(); // retrieve and call
}
  但是这种用法并不能体现Java 8的全部好处,你可以将Optional看成是需要使用某个T值的方法之间某种中间人或者协调者Mediator,而不只是一个普通对象的包装器。
  如果你有一个值返回类型T,你有一个方法需要使用这个值,那么你可以让 Optional 处于中间,确保它们之间交互进行,而不必要人工干预。
  这样,协调者Optional能够照顾T的值提供给你的方法作为输入参数,在这种情况下,如果T是空,可以确保不会出错,这样在T值为空时也可以让一切都正常运作,你也可以让Optional执行其他动作,如执行一段代码块等等,这样它就实际上是语言机制的很好的补充。
  下面这个案例涉及到Lambda表达式 方法引用,是将单词流中第一个以"L"开始单词取出,作为返回结果是一个Optional

回答2:

我们在刚开始使用Android Studio开发Android项目的时候,会发现Android Studio初始化的字体大小和字体样式以及段落并不让我们感到很舒服,总觉得不满意,那么我们就可以自己来定义属于自己的代码字体风格,记下来小编就教大家怎样更改Android Studio代码字体的样式

工具/原料
Android Studio 1.2.2
电脑
方法/步骤
首先找到菜单栏,单击菜单栏的“File”菜单

在弹出的二级菜单中选中“Settings”选项,单击它,打开设置窗口

在设置窗口中的左边部分单击“Editor”选项,展开

在展开的下一级菜单中,找到“Colors & Fonts”选项,展开它

然后在展开的,菜单中选择“Font”选项,打开Font字体设置窗口

在打开的“Font”窗口中,找到“Save As...”按钮,单击它,在弹出的对话框中为自己的设置起一个名字,如果不单击“Save As...”新建一个样式的话,Android Studio默认是不给我们更改的

在弹出的对话框中,输入我们更改后需要保存的样式的名称,然后单击“OK”

接下来我们就可以进行更改设置了,“Primary font”是更改字体样式,比如“楷体”,“Size”我们可以更改字体的大小,“Line spacing”可以更改行间距

更改完成之后我们单击“Apply”应用更改,然后单击“OK”

接下来我们就可以看到,代码的字体样式已经换成了我们更改过的样子了,如果本经验帮到了你,请帮忙点赞,投票