Javaはこの10年で大きく進化しました。多くの開発者はいまだに、冗長な構文や大量のボイラープレートコードを連想するかもしれませんが、モダンJava(Java 8以降)では、よりクリーンで安全、そして表現力の高い開発を可能にする強力な機能が導入されています。
この記事では、すべての開発者が知っておくべき5つの便利なJava機能を紹介します。
1. ラムダ式(Lambda Expressions)
ラムダ式を使うことで、簡潔な関数型スタイルのコードを書くことができます。無名クラスを使う必要がなくなり、コードの可読性が向上します。
Java 8以前:
Runnable r = new Runnable() {
public void run() {
System.out.println("Hello World");
}
};
ラムダ式を使うと:
Runnable r = () -> System.out.println("Hello World");
メリット:
- ボイラープレートコードの削減
- 可読性の向上
- 関数型プログラミングの促進
ラムダ式は、Stream APIやコレクション操作、イベント処理などで広く利用されています。
2. Stream API
Stream APIを使用すると、コレクションを宣言的かつ関数型スタイルで処理できます。
例:
List<String> names = List.of("Alice", "Bob", "Andrew");
names.stream()
.filter(name -> name.startsWith("A"))
.map(String::toUpperCase)
.forEach(System.out::println);
メリット:
- 明確で表現力の高いデータ処理
- 並列実行に対応
- イミュータブルな設計を促進
Streamを使うことで、複雑なデータ変換も読みやすく保守しやすいコードになります。
3. Optionalクラス
Optionalは、値が存在するかどうかを明示的に表現することで、NullPointerExceptionを回避するのに役立ちます。
例:
Optional<String> username = Optional.ofNullable(getUsername()); username.ifPresent(System.out::println);
重要なポイント:
- null安全なコーディングを促進
- APIの意図が明確になる
- 実行時エラーの削減
メソッドがnullを返す代わりに、Optional<T>を返すことで、値が存在しない可能性を明確に表現できます。
4. Records(Java 16以降)
Recordは、不変なデータクラスを簡潔に作成するための機能です。
例:
public record User(String name, int age) {}
コンパイラが自動的に生成するもの:
- コンストラクタ
- Getterメソッド
equals()とhashCode()toString()
メリット:
- ボイラープレートの削減
- デフォルトでイミュータブル
- DTOに最適
Recordは、シンプルなデータ保持用クラスのモデリングに最適です。
5. Switch式(Switch Expressions)
モダンJavaでは、switchが値を返せるようになり、アロー構文(->)も使用できます。
例:
String dayType = switch (day) {
case "Sat", "Sun" -> "Weekend";
default -> "Weekday";
};
優れている点:
- より簡潔な構文
breakが不要- バグの減少
Switch式は可読性を向上させ、意図しないフォールスルー(fall-through)によるエラーを防ぎます。
モダンJavaが目指しているのは、よりクリーンな構文、より安全なコード、そして優れた開発者体験です。
もしまだ古いJavaの書き方を使っているなら、これらの機能を取り入れることで、生産性とコード品質を大きく向上させることができます。
次回の記事もお楽しみに!

