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

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

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

[[434950]]

一、介紹

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

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

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

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

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

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

二、程序示例

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

先創(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)建一個具體實現類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.     } 

輸出結果:

  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類,以提高程序的健壯性!

四、總結

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

巧妙的采用使用空對象模式,可以用于返回無意義的對象,從而承擔處理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

前端空指針數據

2022-01-19 09:00:00

Java空指針開發(fā)

2025-02-27 09:39:56

JavaJava 8對象

2024-02-22 14:06:39

C++指針開發(fā)

2024-12-06 10:12:20

2024-08-12 08:28:35

2015-11-26 10:53:45

LinuxWindowsMac OS

2021-01-19 10:35:49

JVM場景函數

2017-07-26 11:32:50

NETRabbitMQ系統(tǒng)集成

2022-08-11 11:09:38

線上問題程序員

2022-01-04 23:13:57

語言PanicGolang

2020-10-16 11:48:06

服務器系統(tǒng)運維
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久7777 | 午夜免费网站 | 香蕉视频1024 | 日韩成人免费中文字幕 | 亚洲欧美精品久久 | 狠狠操狠狠操 | 久久精品国产免费一区二区三区 | 国产精品久久一区二区三区 | 先锋资源亚洲 | 亚洲一二三区精品 | 欧美一级大片免费观看 | 成人h动漫亚洲一区二区 | 欧美色综合一区二区三区 | 欧美精品成人一区二区三区四区 | 亚洲综合五月天婷婷 | 久久综合久色欧美综合狠狠 | 久久精品这里 | 国产精品毛片久久久久久久 | 亚洲精品美女视频 | 久久久片 | 国产精品久久久久影院色老大 | 欧美一区二区三区视频 | www.亚洲国产精品 | 免费在线一区二区三区 | zzzwww在线看片免费 | 中文字幕一区二区在线观看 | 三区在线观看 | 在线伊人 | 欧洲视频一区 | 欧美日在线 | 亚洲一区二区不卡在线观看 | 久久久久网站 | 国产91久久精品一区二区 | 一区二区三区视频免费观看 | 精品欧美一区二区三区久久久 | 欧美五月婷婷 | 久久综合九色综合欧美狠狠 | 亚洲精品国产成人 | 久草新在线 | 国产成人影院 | 久久一区二区av |