Java は、jdk8 で新しいクラス Optional を導入しました。これはパブリックの最終クラスであり、Java アプリケーションで NullPointerException を処理するために使用されます。このクラスを使用するには、java.util パッケージをインポートする必要があります。特定の変数の値の存在を確認するために使用されるメソッドを提供します。
Javaのオプションのクラスメソッド
メソッド | 説明 |
---|---|
public static オプションの empty() | 空の Optional オブジェクトを返します。このオプションには値が存在しません。 |
public static オプション (T 値) | 指定された現在の非 null 値を含む Optional を返します。 |
public static オプション ofNullable(T 値) | null でない場合は、指定された値を説明する Optional を返し、それ以外の場合は空の Optional を返します。 |
public T get() | この Optional に値が存在する場合はその値を返し、それ以外の場合は NoSuchElementException をスローします。 |
パブリックブール値 isPresent() | 値が存在する場合は true を返し、存在しない場合は false を返します。 |
public void ifPresent(コンシューマ コンシューマ) | 値が存在する場合は、その値を使用して指定されたコンシューマを呼び出します。存在しない場合は何も行いません。 |
public オプションフィルター(述語述語) | 値が存在し、その値が指定された述語に一致する場合は、その値を説明する Optional を返し、それ以外の場合は空の Optional を返します。 |
public オプションマップ(関数マッパー) | 値が存在する場合は、提供されたマッピング関数をそれに適用し、結果が null 以外の場合は、結果を説明するオプションを返します。それ以外の場合は、空のオプションを返します。 |
public オプション flatMap(関数 super T,Optional mapper) | 値が存在する場合は、提供されたオプションを含むマッピング関数をそれに適用し、その結果を返します。それ以外の場合は、空のオプションを返します。 |
public T orElse(T other) | 値が存在する場合はその値を返し、存在しない場合はその他の値を返します。 |
public T orElseGet(サプライヤーその他) | 存在する場合は値を返し、存在しない場合は他の値を呼び出し、その呼び出しの結果を返します。 |
public T orElseThrow(SupplierExceptionSupplier) throws X extends Throwable | 含まれている値が存在する場合はそれを返し、存在しない場合は、提供されたサプライヤーによって作成される例外をスローします。 |
public booleanquals(Object obj) | 他のオブジェクトがこのオプションと「等しい」かどうかを示します。次の場合、他のオブジェクトは等しいとみなされます。
|
public int hashCode() | 現在の値のハッシュ コード値があればそれを返し、値が存在しない場合は 0 (ゼロ) を返します。 |
パブリック String toString() | デバッグに適したこのオプションの空ではない文字列表現を返します。正確な表示形式は未指定であり、実装やバージョンによって異なる場合があります。 |
例: Optional を使用しない Java プログラム
次の例では、Optional クラスを使用していません。このプログラムは異常終了し、nullPointerException をスローします。
public class OptionalExample { public static void main(String[] args) { String[] str = new String[10]; String lowercaseString = str[5].toLowerCase(); System.out.print(lowercaseString); } }
出力:
Exception in thread 'main' java.lang.NullPointerException at lambdaExample.OptionalExample.main(OptionalExample.java:6)
異常終了を避けるため、Optionalクラスを使用します。次の例では、Optional を使用しています。したがって、プログラムはクラッシュすることなく実行できます。
Java オプションの例: 値が存在しない場合
import java.util.Optional; public class OptionalExample { public static void main(String[] args) { String[] str = new String[10]; Optional checkNull = Optional.ofNullable(str[5]); if(checkNull.isPresent()){ // check for value is present or not String lowercaseString = str[5].toLowerCase(); System.out.print(lowercaseString); }else System.out.println('string value is not present'); } }
出力:
string value is not present
Java オプションの例: 値が存在する場合
import java.util.Optional; public class OptionalExample { public static void main(String[] args) { String[] str = new String[10]; str[5] = 'JAVA OPTIONAL CLASS EXAMPLE';// Setting value for 5th index Optional checkNull = Optional.ofNullable(str[5]); if(checkNull.isPresent()){ // It Checks, value is present or not String lowercaseString = str[5].toLowerCase(); System.out.print(lowercaseString); }else System.out.println('String value is not present'); } }
出力:
java optional class example
別の Java オプションの例
import java.util.Optional; public class OptionalExample { public static void main(String[] args) { String[] str = new String[10]; str[5] = 'JAVA OPTIONAL CLASS EXAMPLE'; // Setting value for 5th index Optional checkNull = Optional.ofNullable(str[5]); checkNull.ifPresent(System.out::println); // printing value by using method reference System.out.println(checkNull.get()); // printing value by using get method System.out.println(str[5].toLowerCase()); } }
出力:
JAVA OPTIONAL CLASS EXAMPLE JAVA OPTIONAL CLASS EXAMPLE java optional class example
Java のオプションのメソッドの例
import java.util.Optional; public class OptionalExample { public static void main(String[] args) { String[] str = new String[10]; str[5] = 'JAVA OPTIONAL CLASS EXAMPLE'; // Setting value for 5th index // It returns an empty instance of Optional class Optional empty = Optional.empty(); System.out.println(empty); // It returns a non-empty Optional Optional value = Optional.of(str[5]); // If value is present, it returns an Optional otherwise returns an empty Optional System.out.println('Filtered value: '+value.filter((s)->s.equals('Abc'))); System.out.println('Filtered value: '+value.filter((s)->s.equals('JAVA OPTIONAL CLASS EXAMPLE'))); // It returns value of an Optional. if value is not present, it throws an NoSuchElementException System.out.println('Getting value: '+value.get()); // It returns hashCode of the value System.out.println('Getting hashCode: '+value.hashCode()); // It returns true if value is present, otherwise false System.out.println('Is value present: '+value.isPresent()); // It returns non-empty Optional if value is present, otherwise returns an empty Optional System.out.println('Nullable Optional: '+Optional.ofNullable(str[5])); // It returns value if available, otherwise returns specified value, System.out.println('orElse: '+value.orElse('Value is not present')); System.out.println('orElse: '+empty.orElse('Value is not present')); value.ifPresent(System.out::println); // printing value by using method reference } }
出力:
Optional.empty Filtered value: Optional.empty Filtered value: Optional[JAVA OPTIONAL CLASS EXAMPLE] Getting value: JAVA OPTIONAL CLASS EXAMPLE Getting hashCode: -619947648 Is value present: true Nullable Optional: Optional[JAVA OPTIONAL CLASS EXAMPLE] orElse: JAVA OPTIONAL CLASS EXAMPLE orElse: Value is not present JAVA OPTIONAL CLASS EXAMPLE