欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中避免NullPointerException的方法總結(jié)

 更新時(shí)間:2017年07月04日 09:24:47   投稿:lqh  
這篇文章主要介紹了Java中避免NullPointerException的方法總結(jié)的相關(guān)資料,需要的朋友可以參考下

Java中避免NullPointerException的方法總結(jié)

在字符串常量上調(diào)用equals

// good
"string literal".equals(strObject)
// not good
strObject.equals("string literal")

如果strOject == null,那下面一種方法就會拋出NullPointerException

用valueOf代替toString

javaBigDecimal bd = getPrice();
// good
String.valueOf(bd);
// not good
bd.toString();

原因類似

使用null-safe的庫

如Apache commons中的StringUtils,下面這些方法都不會拋出NullPointerException

StringUtils.isEmpty(null); // returns true
StringUtils.isBlank(null); // returns true
StringUtils.isNumeric(null); // returns false
StringUtils.isAllUpperCase(null); // returns false

函數(shù)盡量不要返回null,而是返回一個(gè)空的對象

Collections輔助類中有靜態(tài)的EMPTY_LIST EMPTY_SET EMPTY_MAP,可以方便的使用它們

public List<Integer> f() {
  try {
    // ...
    return result;
  } catch (SomeException e) {
    e.printStackTrace();
    return Collections.EMPTY_LIST;
  }
}

使用@NotNull @Nullable的注解

加上了注解,部分IDE會幫你檢查你是否沒有檢查可能為null的對象,或者你是否做了多余的檢查。這個(gè)注解是JSR 305的一部分。但即使IDE不支持,這也會使代碼的可讀性變好。

注意加上的注解最好不要產(chǎn)生額外的依賴。java6中有@NotNull但它所在的包似乎并不默認(rèn)就在JRE中,java8中有@NonNull,如果確定代碼不用向下兼容,可以使用java8的@NonNull。

java@NonNull List<String> strList; // A non-null list of Strings.
List<@NonNull String> strList; // A list of non-null Strings. 

避免不必要的自動裝箱

java// Integer getPrice();
int price = obj.getPrice();

注意getPrice返回的是Integer而不是int,因此有可能是null。當(dāng)它是null的時(shí)候,賦值給int類型的變量就會拋出NullPointerException。

定義合理的缺省值,以及利用數(shù)據(jù)庫中的not null限制

javapublic class A {
  private List<Integer> intList = new ArrayList<Integer>();
  private String str = "";
}

比如類中的成員都給初始化一個(gè)空的對象。以及數(shù)據(jù)庫中not null的字段在Java里我們就可以放心大膽的使用基本類型如int而不是Integer了。

實(shí)現(xiàn)一個(gè)表示null的類

這并不是通用的做法,對特定的業(yè)務(wù)邏輯比較有用。

有一個(gè)很好的例子就是著名JSON解析框架Jackson。以下代碼是Jackson從一段JSON中獲取其一級子節(jié)點(diǎn)lv1下的二級子節(jié)點(diǎn)lv2的內(nèi)容:

JsonNode root = ...;
JsonNode child = root.get("lv1").get("lv2");

以上代碼很可能遇到lv1不存在的情況,因此第一個(gè)get()就會返回null,那么第二個(gè)get()執(zhí)行時(shí)自然就拋出NullPointerException了。為了解決這個(gè)問題,作者提供了path方法來替代get方法:

JsonNode root = ...;
JsonNode child = root.path("lv1").path("lv2");

當(dāng)lv1不存在時(shí),path()返回一個(gè)JsonNode的子類叫做MissingNode(但客戶端暫時(shí)無需知道),MissingNode的path方法則繼續(xù)返回MissingNode,這樣無論這個(gè)鏈?zhǔn)秸{(diào)用寫多長都不會拋出任何異常。

直到最后客戶端調(diào)用完成后檢查返回結(jié)果是否為MissingNode:

if (child.isMissingNode()) { ... }

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Java開發(fā)到底為什么要用 IoC 和 AOP

    Java開發(fā)到底為什么要用 IoC 和 AOP

    這篇文章主要介紹了Java開發(fā)到底為什么要用 IoC 和 AOP,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-02-02
  • Java并發(fā)容器ConcurrentLinkedQueue解析

    Java并發(fā)容器ConcurrentLinkedQueue解析

    這篇文章主要介紹了Java并發(fā)容器ConcurrentLinkedQueue解析,
    2023-12-12
  • java去除集合中重復(fù)元素示例分享 java去除重復(fù)

    java去除集合中重復(fù)元素示例分享 java去除重復(fù)

    這篇文章主要介紹了java去除集合中重復(fù)元素示例,大家參考使用吧
    2014-01-01
  • Mybatis配置解析看這一篇就夠了

    Mybatis配置解析看這一篇就夠了

    這篇文章主要介紹了詳解Mybatis是如何解析配置文件的,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • 深入理解java動態(tài)代理機(jī)制

    深入理解java動態(tài)代理機(jī)制

    本篇文章主要介紹了深入理解java動態(tài)代理機(jī)制,詳細(xì)的介紹動態(tài)代理有哪些應(yīng)用場景,什么是動態(tài)代理,怎樣使用,它的局限性在什么地方?有興趣的可以了解一下。
    2017-02-02
  • java連接Access數(shù)據(jù)庫的方法

    java連接Access數(shù)據(jù)庫的方法

    這篇文章主要為大家詳細(xì)介紹了java連接Access數(shù)據(jù)庫的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 解析SpringBoot項(xiàng)目開發(fā)之Gzip壓縮過程

    解析SpringBoot項(xiàng)目開發(fā)之Gzip壓縮過程

    這篇文章主要介紹了SpringBoot項(xiàng)目開發(fā)之Gzip壓縮過程,本文給大家分享幾種Gzip壓縮方式,通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • JAVA回顧:封裝,繼承,多態(tài)

    JAVA回顧:封裝,繼承,多態(tài)

    這篇文章主要介紹了java封裝繼承多態(tài),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • 深入了解Java SpringBoot自動裝配原理

    深入了解Java SpringBoot自動裝配原理

    在使用springboot時(shí),很多配置我們都沒有做,都是springboot在幫我們完成,這很大一部分歸功于springboot自動裝配。本文將詳細(xì)為大家講解SpringBoot的自動裝配原理,需要的可以參考一下
    2022-03-03
  • Spring事務(wù)不生效的8種原因小結(jié)

    Spring事務(wù)不生效的8種原因小結(jié)

    Spring事務(wù)會在幾種特定的場景下失效,本文主要介紹了Spring事務(wù)不生效的8種原因小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09

最新評論