一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

服務(wù)器之家 - 編程語言 - Java教程 - 如何在Java中優(yōu)雅地判空詳解

如何在Java中優(yōu)雅地判空詳解

2021-06-15 11:02李良逸 Java教程

這篇文章主要大家介紹了關(guān)于如何在Java中優(yōu)雅地判空的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

整天都是在跟java打交道。我在java開發(fā)中最常用的一段代碼就是用object != null在使用對象之前判斷是否為空。這么做是為了避免nullpointerexception。但是我發(fā)現(xiàn)這樣檢測代碼實在是太丑了,而且及其不可讀。

那有沒有一種優(yōu)雅的替代方法呢?

判空災難

如何在Java中優(yōu)雅地判空詳解

作為搬磚黨的一族們,我們對判空一定再熟悉不過了,不要跟我說你很少進行判空,除非你喜歡nullpointerexception。

不過nullpointerexception對于很多猿們來說,也是exception家族中最親近的一員了。

如何在Java中優(yōu)雅地判空詳解

為了避免nullpointerexception來找我們,我們經(jīng)常會進行如下操作。

?
1
2
3
if (data != null) {
 do sth.
}

如果一個類中多次使用某個對象,那你可能要一頓操作,so:

如何在Java中優(yōu)雅地判空詳解

“世界第九大奇跡”就這樣誕生了。maybe你會想,項目中肯定不止你一個人會這樣一頓操作,然后按下command+shift+f,真相就在眼前:

如何在Java中優(yōu)雅地判空詳解

what,我們有接近一萬行的代碼都是在判空?

如何在Java中優(yōu)雅地判空詳解

好了,接下來,要進入正題了。

nullobject模式

對于項目中無數(shù)次的判空,對代碼質(zhì)量整潔度產(chǎn)生了十分之惡劣的影響,對于這種現(xiàn)象,我們稱之為“判空災難”。

那么,這種現(xiàn)象如何治理呢,你可能聽說過nullobject模式,不過這不是我們今天的武器,但是還是需要介紹一下nullobject模式。

什么是nullobject模式呢?

in object-oriented computer programming, a null object is an object with no referenced value or with defined neutral ("null") behavior. the null object design pattern describes the uses of such objects and their behavior (or lack thereof).

以上解析來自wikipedia。

nullobject模式首次發(fā)表在“ 程序設(shè)計模式語言 ”系列叢書中。一般的,在面向?qū)ο笳Z言中,對對象的調(diào)用前需要使用判空檢查,來判斷這些對象是否為空,因為在空引用上無法調(diào)用所需方法。

空對象模式的一種典型實現(xiàn)方式如下圖所示(圖片來自網(wǎng)絡(luò)):

如何在Java中優(yōu)雅地判空詳解

示例代碼如下(命名來自網(wǎng)絡(luò),哈哈到底是有多懶):

nullable是空對象的相關(guān)操作接口,用于確定對象是否為空,因為在空對象模式中,對象為空會被包裝成一個object,成為null object,該對象會對原有對象的所有方法進行空實現(xiàn)。。

?
1
2
3
4
5
public interface nullable {
 
 boolean isnull();
 
}

這個接口定義了業(yè)務(wù)對象的行為。

?
1
2
3
4
5
public interface dependencybase extends nullable {
 
 void operation();
 
}

這是該對象的真實類,實現(xiàn)了業(yè)務(wù)行為接口dependencybase與空對象操作接口nullable。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class dependency implements dependencybase, nullable {
 
 @override
 public void operation() {
  system.out.print("test!");
 }
 
 @override
 public boolean isnull() {
  return false;
 }
 
}

這是空對象,對原有對象的行為進行了空實現(xiàn)。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class nullobject implements dependencybase{
 
 @override
 public void operation() {
  // do nothing
 }
 
 @override
 public boolean isnull() {
  return true;
 }
 
}

在使用時,可以通過工廠調(diào)用方式來進行空對象的調(diào)用,也可以通過其他如反射的方式對對象進行調(diào)用(一般多耗時幾毫秒)在此不進行詳細敘述。

?
1
2
3
4
5
6
7
8
9
10
public class factory {
 
 public static dependencybase get(nullable dependencybase){
  if (dependencybase == null){
   return new nullobject();
  }
  return new dependency();
 }
 
}

這是一個使用范例,通過這種模式,我們不再需要進行對象的判空操作,而是可以直接使用對象,也不必擔心npe(nullpointerexception)的問題。

?
1
2
3
4
5
6
7
public class client {
 
 public void test(dependencybase dependencybase){
  factory.get(dependencybase).operation();
 }
 
}

關(guān)于空對象模式,更具體的內(nèi)容大家也可以多找一找資料,上述只是對nullobject的簡單介紹,但是,今天我要推薦的是一款協(xié)助判空的插件nr null object,讓我們來優(yōu)雅地進行判空,不再進行一頓操作來定義繁瑣的空對象接口與空獨享實現(xiàn)類。

.nr null object

nr null object是一款適用于android studio、intellij idea、phpstorm、webstorm、pycharm、rubymine、appcode、clion、goland、datagrip等idea的intellij插件。其可以根據(jù)現(xiàn)有對象,便捷快速生成其空對象模式需要的組成成分,其包含功能如下:

  • 分析所選類可聲明為接口的方法;
  • 抽象出公有接口;
  • 創(chuàng)建空對象,自動實現(xiàn)公有接口;
  • 對部分函數(shù)進行可為空聲明;
  • 可追加函數(shù)進行再次生成;
  • 自動的函數(shù)命名規(guī)范

讓我們來看一個使用范例:

如何在Java中優(yōu)雅地判空詳解

怎么樣,看起來是不是非常快速便捷,只需要在原有需要進行多次判空的對象中,郵件彈出菜單,選擇generate,并選擇nr null object即可自動生成相應(yīng)的空對象組件。

那么如何來獲得這款插件呢?

安裝方式

可以直接通過idea的preferences中的plugins倉庫進行安裝。

選擇 preferences → plugins → browse repositories

如何在Java中優(yōu)雅地判空詳解

搜索“nr null oject”或者“null oject”進行模糊查詢,點擊右側(cè)的install,restart idea即可。

如何在Java中優(yōu)雅地判空詳解

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務(wù)器之家的支持。

原文鏈接:https://www.jianshu.com/p/45ed86e72cc2

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青青久久精品国产免费看 | 青青草国产精品久久碰 | 国产色视频一区二区三区 | 日本小视频网站 | 国内永久第一免费福利视频 | 污小说免费 | 国产精品手机视频一区二区 | xxxxx大片在线观看 | 日本小网站 | 亚洲国产免费观看视频 | 久久噜国产精品拍拍拍拍 | 特级www| 99av导航 | 亚洲精品久久久久AV无码 | 性xxxx中国 | 网红刘婷hd国产高清 | 精品久久久久久国产 | 91免费播放 | 日本一区二区三区视频在线观看 | 日韩亚洲人成网站在线播放 | 免费一看一级欧美 | 欧美亚洲国产一区二区三区 | 免费一级毛片在级播放 | 关晓彤被调教出奶水的视频 | 校园纯肉H教室第一次 | 扒开放荡老师裙子猛烈的进入 | 日韩色综合 | ady@ady9.映画网| 五月色天在线视频综合观看 | 久久中文字幕无线观看 | 国产亚洲欧美在线中文bt天堂网 | poren黑人| 女主被男主做哭失禁高h | 美女脱了内裤打开腿让男人图片 | 色婷婷狠狠 | 日韩欧美天堂 | 成人不卡在线 | 丝袜捆绑调教视频免费区 | 无人影院在线播放视频 | aaa一级特黄 | 国产区成人精品视频 |