您的位置 首页 java

Java 8 – Null 空值替代方案之 Optional

先介绍一下 Groovy 的safe navigation operator ?.

Groovy

可以安全地检测出潜在的null值。

比如下面的数据模型 「个人信息/职位/年收入」

 public class Person {
  private  Position position;
 public Position getPosition ( ) { return  Position }
}  
 public class Position {
  private Salary salary;
  public Salary getSalary ( ) { return salary}
}  
 public class Salary {
  private int salary;
  public int getSalary ( ) { return salary}
}  

现实问题,Person如果是就业前的状态,或者是学生老人情况下,就是没有职位(Position此时就是应该是 null状态,代表值缺失。the absence of a value)

也就没有工资收入。那么getSalary也是null。

因此 编码 工作中,必须要进行 null check,以避免 NullPointerException 的异常抛出。导致程序运行中断。

第①种Null check的写法

 
public int getPositionSalary (Person person) {
 if (Person != null ) {
   Position position = person.getPosition ( );
    if ( position != null ) {
     Salary salary = position.getSalary ( );
    }
  }
  return "Unknown";
}  

虽然这样的代码可以正确解决 Null check问题,但是多层次的if嵌套,增加的代码的阅读难度(readablity)。代码可读性原则要时刻牢记。

虽然市面上的大多数的PM经理们/各级leader,小组长等级别,要求就是能跑起来就行。这种要求其实‬是不‬负责‬的,是缺乏专业性的表现,对于技术的提升是没有好处的。作为技术人员,千万不要认为‬满足‬了这种‬‬要求,就‬万事大吉‬了,可以‬上班‬摸鱼‬了,要‬时刻铭记‬‬提升‬自己的专业‬技能‬。

Java 8 - Null 空值替代方案之 Optional

第②种Null check的写法

 Public int getPositionSalary (Person person){
  if ( person == null ) {
   return "Unknown";
  }
  Position position = person.getPosition ( );
  if ( position == null ) {
  return "Unknown";
  }
  Salary salary = position.getSalary ( );
  if ( salary == null ) {
  return "Unknown";
 }
  return salary;  

虽然第②种写法,避免了深层if嵌套,但是这种解决方法,还不是理想的方法。一是增加了exit points,代码可维护性变差。

上面的代码,用Groovy的 Null check写法如下:

 def getPositionSalary = person?.position?.salary  

Groovy的safe navigation operator ?. 允许在调用链(invocations chain)中传递空指针(null reference)。

文章来源:智云一二三科技

文章标题:Java 8 – Null 空值替代方案之 Optional

文章地址:https://www.zhihuclub.com/187072.shtml

关于作者: 智云科技

热门文章

网站地图