這種通用的類型轉換都會寫在程序工具類中

發布 other 5


先看下面的代碼
    public static void main(String[] args) {
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("key", 36D);
    Object object = map.get("key2");
    // 轉為Double
    Double d1 = (Double) object;
    System.out.println(d1); // null
    // 轉為double
    double d2 = object == null ? 0 : Double.parseDouble(object.toString());
    System.out.println(d2); // 0.0
    Double d3 = d1 + d2; // or double d3 = d1 + d2; NullPointerException
    System.out.println(d3);
    }
    目前我使用兩種轉換方式
    1)轉為 Double ,object 為null時,d1 也為 null
    2)轉為 double ,object 為null時,d2 為 0.0
對于第一種 d1,假若需要使用d1的值去計算,則會空指針異常
    對于第二種 d2,則需要對object判空并賦零值,把原來的 null 改為 0 了。
所以有沒有其他更好的實現方式呢?還是使用 d1或d2?

Double是double的封裝類,是對象,允許null
    所以Double d1 = (Double) object;雖然不報錯,但是d1為null,這時候雖然不會報錯,但是還是要判斷一下,
    double d2 =(double) object ;會報錯,因為double是基本類型,只允許常量
    一般程序中對象是否為null都是程序自己判斷的,可以這樣寫:
    public static void main(String[] args) {
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("key", 36D);
    Object object = map.get("key2");
    // 轉為Double
    Double d1 = (Double) (object == null ? 0D: object);
    System.out.println(d1);
    // 轉為double
    double d2 = (double)(object == null ? 0D: object);
    System.out.println(d2);
    Double d3 = d1 + d2;
    System.out.println(d3);
    }
    }
    一般來說,這種通用的類型轉換都會寫在程序工具類中,比如:
    public static Double parseDouble(Object object){
    return (Double)(object == null ? 0D: object);
    }
    用的時候直接調工具類的方法就行了:
    public static void main(String[] args) {
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("key", 36D);
    Object object = map.get("key");
    // 轉為Double
    Double d1 = parseDouble(object);
    System.out.println(d1);
    // 轉為double
    double d2 = parseDouble(object);
    System.out.println(d2);
    Double d3 = d1 + d2;
    System.out.println(d3);
    }

可以保留 null,也可以賦值 0,具體看需求,但是不能讓程序報錯

null判斷不建議在這里檢測!你可以在傳參時直接不能為null!

1.如果是金錢相關全部轉成BigDecimal來做,用自帶的加減乘除方法計算,記得參數要寫精度和截取方式。
    2.必須使用Double:
    Double封裝類型,支持為null,如果要計算只能處理一下null,不然肯定要報錯的。
    double基本類型,不支持null,可直接計算。
 
黑龙江36选7结果查询