Java8のOptionalクラスの使い方
Java8からjava.util.Optionalクラスが追加されました。
nullチェックをしてくれるクラスです。
Optional.ofNullable
以下のように値をOptional.ofNullableメソッドでラップします。get()で値を取得します。
import java.util.Optional;
public class Sample {
public static void main(String[] args) {
Optional<Integer> opt = Optional.ofNullable(2);
System.out.println(opt.get());
}
}
ofNullableにnullをセットすると、get()部分でNoSuchElementExceptionエラーとなります。
get()を使う場合はisPresent()メソッドを使用してnullでない場合のみget()できるようにします。
import java.util.Optional;
public class Sample {
public static void main(String[] args) {
Optional<Integer> opt = Optional.ofNullable(2);
if (opt.isPresent()) {
System.out.println(opt.get());
}
}
}
ifPresent
nullチェックしているのと同じなので、ifPresentメソッドと言う便利なメソッドもあります。これはnull出ない場合のみ処理を実行してくれます。
import java.util.Optional;
public class Sample {
public static void main(String[] args) {
Optional<Integer> opt = Optional.ofNullable(2);
opt.ifPresent(e -> System.out.println(e)); // Consumerインタフェース
}
}
orElse
get()で値を取得した場合、nullを考慮しないといけませんでした。
ifPresentを使えばnull出ない場合のみ処理をしてくれるのですが、orElseメソッドですとnullの場合、第一引数で指定された値を返してくれます。
import java.util.Optional;
public class Sample {
public static void main(String[] args) {
Optional<Integer> opt = Optional.ofNullable(2);
System.out.println(opt.orElse(3));
}
}
結果は以下のようになります。
2
ofNullableにnullを指定して、orElseに値を指定するとその値が返ります。
以下、例です。
import java.util.Optional;
public class Sample {
public static void main(String[] args) {
Optional<Integer> opt = Optional.ofNullable(null);
System.out.println(opt.orElse(2));
}
}
結果は以下のようになります。
2
orElseGet
orElse()と同様にorElseGet()を指定して値を取得することができます。
orElseGetは以下のようにSupplier型のラムダ式で渡します。
opt.orElseGet(() -> new Integer(3)); // Supplier
orElseGetのようにデフォルト値をラムダ式で記述することによりnullだった場合のみ処理されます。これがorElseとorElseGetの違いです。
以下、例です。
import java.util.Optional;
public class Sample {
public static void main(String[] args) {
Optional<Integer> opt = Optional.ofNullable(null);
System.out.println(opt.orElseGet(() -> new Integer(3)));
}
}
結果は以下のようになります。
3
orElseThrow
値がnullの場合、第一引数で指定した例外をスローします。
package jp.co.confrage;
import java.util.Optional;
public class OptionalSample {
public static void main(String[] args) {
Integer max = null;
Optional<Integer> nullableMax = Optional.ofNullable(max);
nullableMax.orElseThrow(RuntimeException::new); // 例外スローする
}
}
if文を消す
OptionalクラスのorElseを使えば今までif文でnullチェックをしていた箇所を削除することが出来ます。
package jp.co.confrage;
import java.util.Objects;
import java.util.Optional;
public class OptionalSample {
public static void main(String[] args) {
Integer max = Integer.valueOf(1);
if (Objects.isNull(max)) {
max = Integer.valueOf(2);
}
System.out.println(max); // 1
// ↓ if文消す
Optional<Integer> maxtemp = Optional.ofNullable(Integer.valueOf(1));
max = maxtemp.orElse(Integer.valueOf(2));
System.out.println(max); // 1
}
}

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^


コメント