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