java8特性 Optional 工具類

FH-Admin發表於2021-07-28

1. 關於Java8工具類Optional的一點使用心得
  對於Java開發中遇到的npe(空指標問題),其實使用工具類Optional處理效果一般,個人感覺最大的用處就是可以減少一定的if語句,減少一定的非空判斷,千萬不能將Optional放在if內,會非常多此一舉。

個人覺得最實用的例子:
  如果獲取不到student的name屬性(為空),那麼將使用student的rename屬性,即使rename、name為空,也不會出現空指標異常。

import lombok.Data;
import java.util.Optional;

public class qwe {
    //java fhadmin.cn
    public static void main(String[] args) {
        Student student = new Student();
        student.setReName("tom");
        Student student1 = new Student();
        student1.setName( Optional.ofNullable(student.getName()).orElseGet(student::getReName)); //
        System.out.println(student1);
    }
    @Data
    static class Student{
        String name;
        String reName;
    }
}

2. 工具類

package com.ven.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
 * java 8 Optional 工具類
 * @author fhadmin
 * @from fhadmin.cn
 * @ version 1.0
 */
public class OptionalUtil {

    /**
     * 判斷輸入的字串是否為空
     * @param str String
     * @return
     */
    public static boolean isEmpty(String str){
        return  Optional.ofNullable(str).isPresent();
    }

    /**
     * 判斷輸入的Integer是否為空
     * @param num Integer
     * @return
     */
    public static boolean isEmpty(Integer num){
        return  Optional.ofNullable(num).isPresent();
    }
    /**
     * 判斷輸入的Double是否為空
     * @param dnum Double
     * @return
     */
    public static boolean isEmpty(Double dnum){
        return  Optional.ofNullable(dnum).isPresent();
    }
    /**
     * 判斷輸入的Object是否為空
     * @param obj
     * @return
     */
    public static boolean isEmpty(Object obj){
        return  Optional.ofNullable(obj).isPresent();

    }

    /**
     * 判斷輸入的List是否為空,獲取該物件
     * @param obj
     * @return
     */
    public static Object get(Object obj){
        return Optional.ofNullable(obj).isPresent()!=false?Optional.ofNullable(obj).get():null;

    }
    /**
     * 測試
     * @param args
     */
    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        List<String> objList = (List<String>) OptionalUtil.get(list);
        objList.forEach(item->{System.out.println(item);});

        String str = null;
        System.out.println("當前物件:"+OptionalUtil.get(str));

    }
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章