偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

如何優(yōu)雅的解決空指針?

開發(fā) 前端
在實際的系統(tǒng)運行過程中,難免會出現(xiàn)報NullPointerException空指針的錯誤,造成這樣的本質(zhì)原因就是數(shù)據(jù)或者對象為空,導致程序進一步執(zhí)行的時候報錯!

[[434950]]

一、介紹

在實際的系統(tǒng)運行過程中,難免會出現(xiàn)報NullPointerException空指針的錯誤,造成這樣的本質(zhì)原因就是數(shù)據(jù)或者對象為空,導致程序進一步執(zhí)行的時候報錯!

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

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

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

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

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

二、程序示例

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

先創(chuàng)建一個書籍抽象類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(); 

然后,創(chuàng)建一個具體實現(xiàn)類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.     } 

接著,創(chuàng)建一個空對象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.     } 

同時,創(chuàng)建一個書籍獲取工廠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.     } 

輸出結(jié)果:

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

從代碼上可以看出,實現(xiàn)過程比較簡單!

三、應(yīng)用

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

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

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

四、總結(jié)

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

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

五、參考

 

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

 

責任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

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

前端空指針數(shù)據(jù)

2025-02-27 09:39:56

JavaJava 8對象

2022-01-19 09:00:00

Java空指針開發(fā)

2024-02-22 14:06:39

C++指針開發(fā)

2024-12-06 10:12:20

2021-01-19 10:35:49

JVM場景函數(shù)

2017-07-26 11:32:50

NETRabbitMQ系統(tǒng)集成

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

服務(wù)器系統(tǒng)運維

2022-01-04 23:13:57

語言PanicGolang
點贊
收藏

51CTO技術(shù)棧公眾號