Latest web development tutorials

Javaの8オプションクラス

Javaの8の新機能 Javaの8の新機能


オプションのクラスは、コンテナオブジェクトがnullにすることができますです。 値が存在する場合isPresent()メソッドがtrueを返すは、get()メソッドを呼び出し、オブジェクトを返します。

オプションのコンテナです。これは、型Tの値を保持する、または単にnullを保存することができます。 オプションは、多くの有用な方法を提供していますので、我々は、明示的なヌル値検出を行いません。

クラスのオプションの導入、nullポインタ例外に良い解決策。

クラス宣言

次の文java.util.Optional <T>クラスです。

public final class Optional<T>
extends Object

クラスメソッド

いいえ。 メソッドと説明
1 静的<T>オプション<T>空()

空のオプションのインスタンスをバックアップします。

2 ブールのequals(オブジェクトobj)

別の目的は、任意等しいかどうかを決定します。

3 オプション<T>フィルタ(述語< ?スーパー<T>述語)

値が存在し、この値は指定された述語に一致した場合、それ以外の場合は、空のオプションを返す、この値のオプションの説明を返します。

4 <U>オプション<U> flatMap (関数<?スーパーT、オプション<U >>マッパー)

オプションの値が存在する場合は、戻り値のマッピング方法ここに含まれる基づいている、それ以外の場合は、空のオプションを返します

5 T取得()

あなたは、このオプション、戻り値の値、そうでない場合は例外がスローされますが含まれている場合:はNoSuchElementExceptionを

6 int型のhashCode()

、ハッシュコード値が存在して返した値が存在しない場合は0を返します。

7 ボイドifPresent(消費者<?スーパーT >消費者)

値が存在する場合、値は、消費者を呼び出すために使用され、そうでなければ何もしません。

8 ブールisPresent()

値はメソッドがtrueを返す存在する場合、それ以外の場合はfalseを返します。

9 <U>オプション<U>マップ (関数<?スーパーT、?拡張するU>マッパー)

マッピング方法の値は、存在が提供されている場合、それがnull以外を返す場合、結果オプションの説明を返します。

10 静的<T>オプション<T> (T値)の

指定されたオプションのnull以外の値を返します。

11 静的<T>オプション<T> ofNullable(T値)

null以外の場合は、オプションの別の空、オプションの説明指定された値を返します。

12 T orElse(他のT)

値が存在する場合、戻り値、そうでなければ他の。

13 T orElseGet(サプライヤー<?拡張T >その他)

値が存在する場合、戻り値は、それ以外の場合は、他のトリガー、その結果他のコールを返します。

14 T orElseThrow <Xは、Throwableを拡張する>(サプライヤーをexceptionSupplier <?X拡張>)

値が存在する場合、戻り値はそれ以外のサプライヤ継承異常によってスロー含ま

15 文字列のtoString()

デバッグに使用するオプションの非空の文字列を返します

注:これらのメソッドは来るクラスjava.lang.Objectから継承されます。


オプションの例

私たちは、以下の例を通して、より良いオプションクラスの使用を理解することができます。

import java.util.Optional;

public class Java8Tester {
   public static void main(String args[]){
   
      Java8Tester java8Tester = new Java8Tester();
      Integer value1 = null;
      Integer value2 = new Integer(10);
		
      // Optional.ofNullable - 允许传递为 null 参数
      Optional<Integer> a = Optional.ofNullable(value1);
		
      // Optional.of - 如果传递的参数是 null,抛出异常 NullPointerException
      Optional<Integer> b = Optional.of(value2);
      System.out.println(java8Tester.sum(a,b));
   }
	
   public Integer sum(Optional<Integer> a, Optional<Integer> b){
	
      // Optional.isPresent - 判断值是否存在
		
      System.out.println("第一个参数值存在: " + a.isPresent());
      System.out.println("第二个参数值存在: " + b.isPresent());
		
      // Optional.orElse - 如果值存在,返回它,否则返回默认值
      Integer value1 = a.orElse(new Integer(0));
		
      //Optional.get - 获取值,值需要存在
      Integer value2 = b.get();
      return value1 + value2;
   }
}

上記のスクリプトの実装、出力は次のようになります。

$ javac Java8Tester.java 
$ java Java8Tester
第一个参数值存在: false
第二个参数值存在: true
10

Javaの8の新機能 Javaの8の新機能