只使用Optional中的两个方法防止NPE

66 阅读1分钟

简介

本文希望能帮助读者,在最快的时间内学会如何使用Optional,在工作中全面使用Optional,避免出现空指针问题。

参考文章:用Optional后代码变清爽多了

快速开始

原则一:只使用Optional.ofNullable()

解释:目标是全面使用Optional,为了降低决策时间,防止纠结不同场景该使用哪种API。因此,只是使用Optional.ofNullable(),并且笔者认为工作中使用Optional.of()Optional.empty()的场景较少。

原则二:尽量只使用map()orElse()

解释:使用map(),可以在不担心NPE的情况下获取值。使用orElse()给某个对象为空时的结果一个默认值。

原则三:尽量不使用ifPresent

解释:可读性并不高,但是如果处理表达式较简单,可在特定场景使用。

最佳实践

原则二

@Data
public class Position {

    private String positionName;

    private Index index;

    @Data
    public static class Index{

        private Integer x;

        private Integer y;
    }
}
    private Integer sumIndex(Position position){
        Integer xIndex = Optional.ofNullable(position)
                .map(Position::getIndex)
                .map(Position.Index::getX)
                .orElse(0);
        Integer yIndex = Optional.ofNullable(position)
                .map(Position::getIndex)
                .map(Position.Index::getY)
                .orElse(0);
        return xIndex + yIndex;
    }

原则三

    private void exchangeIndex(Position position){
        Optional.ofNullable(position)
                .map(Position::getIndex)
                .ifPresent(index -> {
                    Integer temp = index.getX();
                    index.setX(index.getY());
                    index.setY(temp);
                });
    }