成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何優雅的解決空指針?

開發 前端
在實際的系統運行過程中,難免會出現報NullPointerException空指針的錯誤,造成這樣的本質原因就是數據或者對象為空,導致程序進一步執行的時候報錯!

[[434950]]

一、介紹

在實際的系統運行過程中,難免會出現報NullPointerException空指針的錯誤,造成這樣的本質原因就是數據或者對象為空,導致程序進一步執行的時候報錯!

一般的常規解決辦法也就是加一個if判斷。

  1. if(obj != null){ 
  2.   //doSomthing 

如果出現需要判斷的對象過多,難以避免的會出現很多對Null的判斷語句,而這些語句一旦多起來,我們的代碼就會變的慘不忍睹。

針對這種情況,我們可以引入了空對象模式以此來使我們的代碼變的更優雅一點。

廢話也不多說了,代碼直接擼起來!

二、程序示例

下面,我們以獲取從一個書籍庫中獲取書籍為例,實現過程如下!

先創建一個書籍抽象類AbstractBook,代碼如下:

  1. public abstract class AbstractBook { 
  2.  
  3.     //書名 
  4.     protected String bookName; 
  5.  
  6.     //判斷是否存在 
  7.     public abstract boolean isExist(); 
  8.  
  9.     //獲取書名 
  10.     public abstract String getName(); 

然后,創建一個具體實現類Book,如下:

  1. public class Book extends AbstractBook { 
  2.  
  3.     public Book(String bookName) { 
  4.         this.bookName = bookName; 
  5.     } 
  6.  
  7.     @Override 
  8.     public boolean isExist() { 
  9.         return false
  10.     } 
  11.  
  12.     @Override 
  13.     public String getName() { 
  14.         return bookName; 
  15.     } 

接著,創建一個空對象NullObjectBook,如下:

  1. public class NullObjectBook extends AbstractBook { 
  2.  
  3.     @Override 
  4.     public boolean isExist() { 
  5.         return true
  6.     } 
  7.  
  8.     @Override 
  9.     public String getName() { 
  10.         return "沒有..."
  11.     } 

同時,創建一個書籍獲取工廠BookFactory,如下:

  1. public class BookFactory { 
  2.  
  3.     public static final String[] names = {"java核心卷1""java核心卷2""軟件隨想錄""python入門"}; 
  4.  
  5.     public static AbstractBook getBook(String bookName){ 
  6.         for (int i = 0; i < names.length; i++) { 
  7.             if(names[i].equals(bookName)){ 
  8.                 return new Book(bookName); 
  9.             } 
  10.         } 
  11.         return new NullObjectBook(); 
  12.     } 

最后,編寫一個測試客戶端,如下:

  1. public class NullObjectClient { 
  2.  
  3.     public static void main(String[] args) { 
  4.         AbstractBook book1 = BookFactory.getBook("java核心卷2"); 
  5.         AbstractBook book2 = BookFactory.getBook("python入門"); 
  6.         AbstractBook book3 = BookFactory.getBook("java編程思想"); 
  7.         AbstractBook book4 = BookFactory.getBook("軟件隨想錄"); 
  8.  
  9.         System.out.println(book1.getName()); 
  10.         System.out.println(book2.getName()); 
  11.         System.out.println(book3.getName()); 
  12.         System.out.println(book4.getName()); 
  13.     } 

輸出結果:

  1. java核心卷2 
  2. python入門 
  3. 沒有... 
  4. 軟件隨想錄 

從代碼上可以看出,實現過程比較簡單!

三、應用

空對象模式在編程中應用也很廣,例如 google 的 guava 庫提供了Optional類,可以有效的判斷null對象。

  1. ptional<Integer> possible = Optional.of(5); 
  2. possible.isPresent(); // returns true 
  3. possible.get(); // returns 5 

在 jdk1.8 中也新增了Optional類,以提高程序的健壯性!

四、總結

在寫代碼的時候我們經常會遇到空指針,為了避免空指針的發生需要做一些判斷。如果是復雜對象的話,還需要一層層地去判斷。

巧妙的采用使用空對象模式,可以用于返回無意義的對象,從而承擔處理null的責任,提升程序員的可讀性!

五、參考

 

1、菜鳥教程 - 空對象模式

 

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2024-10-15 15:58:11

2023-10-08 11:09:22

Optional空指針

2023-08-04 08:52:52

Optional消滅空指針

2024-02-01 12:09:17

Optional容器null

2024-02-28 09:03:20

Optional空指針Java

2015-07-30 10:12:32

JavaNullAssert

2020-09-25 11:30:20

Java判空代碼

2020-04-10 10:22:12

Java判空編程語言

2020-11-02 07:43:33

前端空指針數據

2025-02-27 09:39:56

JavaJava 8對象

2022-01-19 09:00:00

Java空指針開發

2024-02-22 14:06:39

C++指針開發

2024-12-06 10:12:20

2021-01-19 10:35:49

JVM場景函數

2017-07-26 11:32:50

NETRabbitMQ系統集成

2015-11-26 10:53:45

LinuxWindowsMac OS

2022-08-11 11:09:38

線上問題程序員

2024-08-12 08:28:35

2020-10-16 11:48:06

服務器系統運維

2022-01-04 23:13:57

語言PanicGolang
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕黄色大片 | 日本精品视频 | 亚洲最大成人综合 | 男女视频在线观看网站 | 亚洲女优在线播放 | 一级片av | 在线免费观看a级片 | 国产精品视频在线免费观看 | 日本不卡免费新一二三区 | 在线看91 | 欧美久久一级特黄毛片 | 日本亚洲精品成人欧美一区 | 欧美日韩精品一区 | 日一日操一操 | 国产精品福利一区二区三区 | 久久精品二区亚洲w码 | 91久久国产综合久久 | 国产日韩免费观看 | 久久精品成人 | 91久久久久久 | 免费在线观看一区二区三区 | 超碰电影| 在线观看国产视频 | 欧美成人自拍视频 | 亚洲免费网 | 一区二区不卡高清 | 成人免费视频观看 | 国产美女一区二区 | 视频一区二区中文字幕 | 国产一区二区三区免费视频 | 在线观看国产视频 | 免费永久av | 欧美久久久久久久 | 国产精品99久久久久久www | 男女网站免费观看 | 国产精品一区二区欧美 | 欧美日韩国产一区二区三区 | 久久久精品国产 | 91麻豆精品国产91久久久更新资源速度超快 | 大象视频一区二区 | 久久狠狠 |