自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

[[434950]]

一、介紹

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

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

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

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

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

廢話(huà)也不多說(shuō)了,代碼直接擼起來(lái)!

二、程序示例

下面,我們以獲取從一個(gè)書(shū)籍庫(kù)中獲取書(shū)籍為例,實(shí)現(xiàn)過(guò)程如下!

先創(chuàng)建一個(gè)書(shū)籍抽象類(lèi)AbstractBook,代碼如下:

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

然后,創(chuàng)建一個(gè)具體實(shí)現(xiàn)類(lèi)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)建一個(gè)空對(duì)象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 "沒(méi)有..."
  11.     } 

同時(shí),創(chuàng)建一個(gè)書(shū)籍獲取工廠(chǎng)BookFactory,如下:

  1. public class BookFactory { 
  2.  
  3.     public static final String[] names = {"java核心卷1""java核心卷2""軟件隨想錄""python入門(mén)"}; 
  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.     } 

最后,編寫(xiě)一個(gè)測(cè)試客戶(hù)端,如下:

  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入門(mén)"); 
  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入門(mén) 
  3. 沒(méi)有... 
  4. 軟件隨想錄 

從代碼上可以看出,實(shí)現(xiàn)過(guò)程比較簡(jiǎn)單!

三、應(yīng)用

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

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

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

四、總結(jié)

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

巧妙的采用使用空對(duì)象模式,可以用于返回?zé)o意義的對(duì)象,從而承擔(dān)處理null的責(zé)任,提升程序員的可讀性!

五、參考

 

1、菜鳥(niǎo)教程 - 空對(duì)象模式

 

責(zé)任編輯:武曉燕 來(lái)源: 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-11-02 07:43:33

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

2020-04-10 10:22:12

Java判空編程語(yǔ)言

2022-01-19 09:00:00

Java空指針開(kāi)發(fā)

2025-02-27 09:39:56

JavaJava 8對(duì)象

2024-12-06 10:12:20

2024-02-22 14:06:39

C++指針開(kāi)發(fā)

2024-08-12 08:28:35

2022-01-04 23:13:57

語(yǔ)言PanicGolang

2015-11-26 10:53:45

LinuxWindowsMac OS

2017-07-26 11:32:50

NETRabbitMQ系統(tǒng)集成

2021-01-19 10:35:49

JVM場(chǎng)景函數(shù)

2022-08-11 11:09:38

線(xiàn)上問(wèn)題程序員

2023-10-10 13:23:18

空指針異常Java
點(diǎn)贊
收藏

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