1. 程式人生 > >Java8新特性7--使用Optional解決空指標問題

Java8新特性7--使用Optional解決空指標問題

身為一名Java程式設計師,大家可能都有這樣的經歷:呼叫一個方法得到了返回值卻不能直接將返回值作為引數去呼叫別的方法。我們首先要判斷這個返回值是否為null,只有在非空的前提下才能將其作為其他方法的引數。這正是一些類似Guava的外部API試圖解決的問題。一些JVM程式語言比如Scala、Ceylon等已經將對在核心API中解決了這個問題。在我的前一篇文章中,介紹了Scala是如何解決了這個問題。

新版本的Java,比如Java 8引入了一個新的Optional類。Optional類的Javadoc描述如下:

這是一個可以為null的容器物件。如果值存在則isPresent()方法會返回true,呼叫get()方法會返回該物件。

本文會逐個探討Optional類包含的方法,並通過一兩個示例展示如何使用。

of

為非null的值建立一個Optional。

of方法通過工廠方法建立Optional類。需要注意的是,建立物件時傳入的引數不能為null。如果傳入引數為null,則丟擲NullPointerException 。

1 2 3 4 //呼叫工廠方法建立Optional例項 Optional<String> name = Optional.of("Sanaulla"); //傳入引數為null,丟擲NullPointerException.
Optional<String> someNull = Optional.of(null);

ofNullable

為指定的值建立一個Optional,如果指定的值為null,則返回一個空的Optional。

ofNullable與of方法相似,唯一的區別是可以接受引數為null的情況。示例如下:

1 2 3 //下面建立了一個不包含任何值的Optional例項 //例如,值為'null' Optional empty = Optional.ofNullable(
null);

isPresent

非常容易理解

如果值存在返回true,否則返回false。

類似下面的程式碼:

1 2 3 4 5 //isPresent方法用來檢查Optional例項中是否包含值 if(name.isPresent()) { //在Optional例項內呼叫get()返回已存在的值 System.out.println(name.get());//輸出Sanaulla }

get

如果Optional有值則將其返回,否則丟擲NoSuchElementException。

上面的示例中,get方法用來得到Optional例項中的值。下面我們看一個丟擲NoSuchElementException的例子:

1 2 3 4 5 6 7 //執行下面的程式碼會輸出:No value present try{ //在空的Optional例項上呼叫get(),丟擲NoSuchElementException System.out.println(empty.get()); }catch(NoSuchElementException ex) { System.out.println(ex.getMessage()); }

ifPresent

如果Optional例項有值則為其呼叫consumer,否則不做處理

要理解ifPresent方法,首先需要了解Consumer類。簡答地說,Consumer類包含一個抽象方法。該抽象方法對傳入的值進行處理,但沒有返回值。Java8支援不用介面直接通過

相關推薦

Java8特性7--使用Optional解決指標問題

身為一名Java程式設計師,大家可能都有這樣的經歷:呼叫一個方法得到了返回值卻不能直接將返回值作為引數去呼叫別的方法。我們首先要判斷這個返回值是否為null,只有在非空的前提下才能將其作為其他方法的引數。這正是一些類似Guava的外部API試圖解決的問題。一些JVM程

Java8特性Optional

.get value api new java代碼 optional padding 正常 line 空指針異常一直是困擾Java程序員的問題,也是我們必須要考慮的。當業務代碼中充滿了if else判斷null 的時候程序變得不再優雅,在Java8中提供了Optional類

Java8特性Optional詳解

Java8中對空值提供了一個操作類。Optional。下面介紹下他的方法。 靜態方法: Optional.of(T)    返回Optional包裹的物件,如果傳入的引數為空,將丟擲空指標異常。 Optional.ofNullable(T) 返回Optional包裹的物件

Java8特性指標異常的剋星Optional

Java8新特性系列我們已經介紹了Stream、Lambda表示式、DateTime日期時間處理,最後以“NullPointerException” 的剋星Optional類的講解來收尾。 背景 作為開發人員每天與NullPointerException鬥智鬥勇。每接收到引數或呼叫方法獲得值得判斷一下是否為n

Java8特性之:Optional

java8 Optional 一. 用Optional取代null 1. Optional類 java.util.Optional<T>是一個封裝Optional值的類。 變量存在時,Optional類只是對類進行簡單的封裝。變量不存在時,缺失的值會被建模

Java8特性整理之Optional取代Null引用

Java8新特性整理之Optional取代Null引用   版權宣告:歡迎轉載!請註明出處! https://blog.csdn.net/u011726984/article/details/79315837 java8之前如何避免空指標異常 相信大家在開發中都會碰到Nul

java8特性---Optional

轉自:https://blog.csdn.net/hwsdau/article/details/78791328 我們首先要判斷這個返回值是否為null,只有在非空的前提下才能將其作為其他方法的引數 Optional類是一個可以為null的容器物件。探求一下它的方法。 1、of 

java8特性 stream、lambde、optional

一、stream: stream() − 為集合建立序列流。 parallelStream() − 為集合建立並行流。 forEach Stream 提供了新的方法 'forEach' 來迭代流中的每個資料。以下程式碼片段使用 forEach 輸出了1

Java8特性——Optional

        Optional<T>類(java.util.Optional)是一個容器類,代表一個值存在或不存在,原來用null表示一個值不存在,現在Optiolal可以更好地表達這個概念。並且可以避免空指標異常。         也就是說呼叫一個方法得到了

java8 特性 Optional容器類

system ava turn fun 需求 創建 clas nbsp 老師 public class Godness { private String name; public Godness() { } public Godn

Java8特性(lambda、Stream、Optional

1、λ表示式lambda表示式:λ表示式是Java8新增的一個特性,《Core Java》中的對它的解析是——“一個可傳遞的程式碼塊,可以在以後執行一次或多次”。從日常開發的角度來看,它可以簡化我們的很

Java8 特性如何風騷走位防止指針異常

如果 inter ron 業務 nes 發生 空指針異常 post java 文章整理翻譯自 https://winterbe.com/posts/2015/03/15/avoid-null-checks-in-java/ 文章首發於個人網站: https://www.e

Java8特性之五:Optional

並且 信息 owa true class object throws 當前 text   NullPointerException相信每個JAVA程序員都不陌生,是JAVA應用程序中最常見的異常。之前,Google Guava項目曾提出用Optional類來包裝對象從而解決

Java8特性】不瞭解Optional類,簡歷上別說你懂Java8!!

## 寫在前面 > 最近,很多讀者出去面試都在Java8上栽了跟頭,事後自己分析,確實對Java8的新特性一知半解。然而,卻在簡歷顯眼的技能部分寫著:熟練掌握Java8的各種新特性,能夠迅速使用Java8開發高併發應用!這不,又一名讀者因為寫了熟練掌握Java8的新特性而被面試官虐的體無完膚!我不是說

Java8特性——lambda表達式.(案例:詞頻統計)

word ont lose args list lower cep stream spa 需求:讀入一個文本文件,確定所有單詞的使用頻率並從高到低排序,打印出所有單詞及其頻率的排序列表 先用傳統方法解: 1 package cn._1.wordfrequency; 2

Java8特性——lambda表達式.(案例:完全數分類)

完全 boolean lte arraylist efi def oid 輸入 class 需求:輸入一個數,判斷其類型(完全數,過剩數,不足數) 完全數:自身之外所有因數和==自身 過剩數:自身之外所有因數和>自身 不足數:自身之外所有因數和<自身 1 p

Java8 特性

too opera down font splay eas array display tac 1.接口改善   a.接口中可以定義靜態方法   b.更重要的是,接口中的方法,可以用default修飾後,添加方法體 2.為什麽不能用默認方法來重寫equals,hashcod

Java精品高級課,架構課,java8特性,P2P金融項目,程序設計,功能設計,數據庫設計,第三方支付,web安全,視頻教程

數據庫設計 zfs 調優 pex 完整版 city 後臺 中間件 集群 36套精品Java架構師,高並發,高性能,高可用,分布式,集群,電商,緩存,性能調優,設計模式,項目實戰,P2P金融項目,大型分布式電商實戰視頻教程 視頻課程包含: 高級Java架構師包含:Sp

Java 8 特性:4-Optional

get方法 syn 序列 new ret 有一個 例子 使用 n) (原) 先看看上面的說明: /** * A container object which may or may not contain a non-null value. * If a value

Java8特性

java編程 function ats 編碼解碼 sof 企業 void lar 通過 前言: Java 8 已經發布很久了,很多報道表明Java 8 是一次重大的版本升級。在Java Code Geeks上已經有很多介紹Java 8新特性的文章,例如Playing wit