Java 8 の新機能

Java 8(別名 jdk 1.8)は、Java言語開発における主要なバージョンです。Oracle社は2014年3月18日にJava 8をリリースしました。Java 8は関数型プログラミング、新しいJavaScriptエンジン、新しい日付API、新しいStream APIなどをサポートしています。


新機能

Java 8では非常に多くの機能が追加されましたが、ここでは主に以下のいくつかについて説明します:

  • Lambda 式− Lambda は関数をメソッドのパラメータとして渡すことを可能にします(関数をパラメータとしてメソッドに渡します)。

  • メソッド参照− メソッド参照は非常に便利な構文を提供し、既存のJavaクラスやオブジェクト(インスタンス)のメソッドやコンストラクタを直接参照できます。ラムダと組み合わせて使用することで、メソッド参照は言語の構文をよりコンパクトで簡潔にし、冗長なコードを減らすことができます。

  • デフォルトメソッド− デフォルトメソッドとは、インターフェース内で実装を持つメソッドのことです。

  • 新しいツール− 新しいコンパイルツール、例:Nashornエンジン jjs、クラス依存関係アナライザ jdeps。

  • Stream API− 新しく追加されたStream API(java.util.stream)は、真の関数型プログラミングスタイルをJavaにもたらします。

  • Date Time API− 日付と時刻の処理を強化します。

  • Optional クラス− Optional クラスはJava 8クラスライブラリの一部となり、nullポインタ例外を解決するために使用されます。

  • Nashorn、JavaScript エンジン− Java 8は新しいNashorn JavaScriptエンジンを提供し、JVM上で特定のJavaScriptアプリケーションを実行することができます。

より多くの新機能については公式サイトを参照してください:What's New in JDK 8

Java 8に関する記事の例では、すべてjdk 1.8環境を使用しています。以下のコマンドで現在のjdkバージョンを確認できます:

$ java -version
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)

プログラミングスタイル

Java 8は独自のプログラミングスタイルを持ち、Java 7と区別されることを目指しています。以下の例は、Java 7とJava 8のプログラミング形式を示しています:

Java8Tester.java ファイルコード:

import java.util.Collections; import java.util.List; import java.util.ArrayList; import java.util.Comparator; public class Java8Tester { public static void main(String args[]){ List<String> names1 = new ArrayList<String>(); names1.add("Google "); names1.add("サンプル "); names1.add("Taobao "); names1.add("Baidu "); names1.add("Sina "); List<String> names2 = new ArrayList<String>(); names2.add("Google "); names2.add("サンプル "); names2.add("Taobao "); names2.add("Baidu "); names2.add("Sina "); Java8Tester tester = new Java8Tester(); System.out.println("Java 7構文を使用:"); tester.sortUsingJava7(names1); System.out.println(names1); System.out.println("Java 8構文を使用:"); tester.sortUsingJava8(names2); System.out.println(names2); } //Java 7でソート private void sortUsingJava7(List<String> names){ Collections.sort(names, new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.compareTo(s2); } }); } //Java 8でソート private void sortUsingJava8(List<String> names){ Collections.sort(names, (s1, s2) -> s1.compareTo(s2)); } }

上記のスクリプトを実行すると、出力結果は次のようになります:

$ javac Java8Tester.java
$ java Java8Tester
使用 Java 7 语法: 
[Baidu , Google , サンプル , Sina , Taobao ]
使用 Java 8 语法: 
[Baidu , Google , サンプル , Sina , Taobao ]

次に、Java 8の新機能について詳しく紹介します:

番号 機能
1 Lambda 式
2 メソッド参照
3 関数型インターフェース
4 デフォルトメソッド
5 Stream
6 Optional クラス
7 Nashorn、JavaScript エンジン
8 新しい日付時刻 API
9 Base64
その他の拡張