激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java中避免NullPointerException的方法總結

Java中避免NullPointerException的方法總結

2020-11-27 10:50-SOLO- Java教程

這篇文章主要介紹了Java中避免NullPointerException的方法總結的相關資料,需要的朋友可以參考下

Java中避免NullPointerException的方法總結

在字符串常量上調用equals

?
1
2
3
4
// good
"string literal".equals(strObject)
// not good
strObject.equals("string literal")

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

用valueOf代替toString

?
1
2
3
4
5
javaBigDecimal bd = getPrice();
// good
String.valueOf(bd);
// not good
bd.toString();

原因類似

使用null-safe的庫

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

?
1
2
3
4
StringUtils.isEmpty(null); // returns true
StringUtils.isBlank(null); // returns true
StringUtils.isNumeric(null); // returns false
StringUtils.isAllUpperCase(null); // returns false

函數盡量不要返回null,而是返回一個空的對象

?
1
2
3
4
5
6
7
8
9
10
11
Collections輔助類中有靜態的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的對象,或者你是否做了多余的檢查。這個注解是JSR 305的一部分。但即使IDE不支持,這也會使代碼的可讀性變好。

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

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

避免不必要的自動裝箱

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

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

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

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

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

實現一個表示null的類

這并不是通用的做法,對特定的業務邏輯比較有用。

有一個很好的例子就是著名JSON解析框架Jackson。以下代碼是Jackson從一段JSON中獲取其一級子節點lv1下的二級子節點lv2的內容:

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

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

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

當lv1不存在時,path()返回一個JsonNode的子類叫做MissingNode(但客戶端暫時無需知道),MissingNode的path方法則繼續返回MissingNode,這樣無論這個鏈式調用寫多長都不會拋出任何異常。

直到最后客戶端調用完成后檢查返回結果是否為MissingNode:

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

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

原文鏈接:http://blog.csdn.net/qq_22706515/article/details/51005969

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久婷婷一区二区三区 | www亚洲成人 | 欧美中文字幕一区二区三区亚洲 | 精品久久久久久久久久中文字幕 | 久久亚洲第一 | 成人激情综合网 | 高清国产免费 | 午夜影视一区二区 | 在线免费日韩 | 久久激情小视频 | 国产精品一区二区三区在线看 | 国产免费观看视频 | 国产日韩中文字幕 | 成人羞羞在线观看网站 | 一区二区三区在线观看免费视频 | 毛片视频网站在线观看 | 精品在线视频播放 | 欧美精品一区二区三区四区 | 久久影库 | 亚洲成人午夜精品 | 欧美成网 | 黄色三级三级三级 | 看国产精品 | 亚洲性生活免费视频 | 国产欧美精品综合一区 | 中文字幕免费一区 | 91高清国产 | 久久久久久久.comav | 激情小说激情电影 | 久久91亚洲精品久久91综合 | 成人在线免费看 | 羞羞的动漫在线观看 | 国产午夜亚洲精品午夜鲁丝片 | av在线电影网址 | 欧美精品电影一区二区 | 香蕉久久久久 | 亚洲一区二区中文字幕在线观看 | 92看片淫黄大片一级 | 羞羞视频免费入口网站 | 久久久资源网 | 欧美日韩在线中文字幕 |