Java 7のどの新機能が実装される予定ですか?そして、今何をしていますか?
これは、Java 7 OpenJDK 7の機能ページ)からの7つの新機能の概要 :
vm JSR 292:動的に型指定された言語のサポート(InvokeDynamic) 厳密なクラスファイルチェック lang JSR 334:小さな言語の機能強化(Project Coin) coreクラスローダーアーキテクチャのアップグレード URLClassLoaderを閉じるメソッド 同時実行性およびコレクションの更新(jsr166y) i18n Unicode 6.0 ロケールの強化 個別のユーザーロケールおよびユーザーインターフェイスロケール ionet JSR 203:Javaプラットフォーム(NIO.2) NIO.2ファイルシステムプロバイダー用の新しいI/O API/jar archives SCTP(Stream Control Transmission Protocol) SDP(Sockets Direct Protocol) Windows Vista IPv6スタックを使用 TLS 1.2 sec楕円曲線暗号化(ECC) jdbc JDBC 4.1 クライアントXRenderパイプラインJava 2D 6u10グラフィック機能用の新しいプラットフォームAPIを作成します。 ____。]ニンバスSwing Swing JLayerコンポーネントのルックアンドフィール Gervillサウンドシンセサイザー[新規] web XMLスタックの更新 mgmt Enhanced MBeans [更新]
この:
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}
になる:
try (BufferedReader br = new BufferedReader(new FileReader(path)) {
return br.readLine();
}
クローズする複数のリソースを宣言できます。
try (
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest))
{
// code
}
int one_million = 1_000_000;
String s = ...
switch(s) {
case "quux":
processQuux(s);
// fall-through
case "foo":
case "bar":
processFooOrBar(s);
break;
case "baz":
processBaz(s);
// fall-through
default:
processDefault(s);
break;
}
int binary = 0b1001_1001;
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
になる:
Map<String, List<String>> anagrams = new HashMap<>();
この:
} catch (FirstException ex) {
logger.error(ex);
throw ex;
} catch (SecondException ex) {
logger.error(ex);
throw ex;
}
になる:
} catch (FirstException | SecondException ex) {
logger.error(ex);
throw ex;
}
この:
@SuppressWarnings({"unchecked", "varargs"})
public static void printAll(List<String>... lists){
for(List<String> list : lists){
System.out.println(list);
}
}
になる:
@SafeVarargs
public static void printAll(List<String>... lists){
for(List<String> list : lists){
System.out.println(list);
}
}
JLayerクラスを使用したコンポーネントの装飾:
JLayerクラスは、Swingコンポーネント用の柔軟で強力なデコレーターです。 Java SE 7のJLayerクラスは、Java.netのJxLayerプロジェクトプロジェクトと精神的に似ています。 JLayerクラスは当初JXLayerプロジェクトに基づいていましたが、そのAPIは個別に進化しました。
switchステートメントの文字列:
JDK 7では、switchステートメントの式でStringオブジェクトを使用できます。 Javaコンパイラは、一般に、チェーン化されたif-then-elseステートメントよりも、Stringオブジェクトを使用するswitchステートメントからより効率的なバイトコードを生成します。
汎用インスタンスの型推論:
コンパイラがコンテキストから型引数を推測できる限り、ジェネリッククラスのコンストラクターを呼び出すために必要な型引数を型パラメーターの空のセット(<>)に置き換えることができます。この山括弧のペアは、略してダイヤモンドと呼ばれます。 Java SE 7は、汎用インスタンス作成のための限定型推論をサポートしています。型推論は、コンストラクターのパラメーター化された型がコンテキストから明らかな場合にのみ使用できます。たとえば、次の例はコンパイルされません。
List<String> l = new ArrayList<>();
l.add("A");
l.addAll(new ArrayList<>());
比較すると、次の例はコンパイルします。
List<? extends String> list2 = new ArrayList<>();
l.addAll(list2);
複数の例外タイプをキャッチし、タイプチェックを改善して例外を再スローする:
Java SE 7以降では、1つのcatchブロックで複数の種類の例外を処理できます。この機能により、コードの重複を減らすことができます。各catchブロックに重複したコードを含む次のコードを検討してください。
catch (IOException e) {
logger.log(e);
throw e;
}
catch (SQLException e) {
logger.log(e);
throw e;
}
Java SE 7より前のリリースでは、変数eのタイプが異なるため、重複するコードを排除するための共通のメソッドを作成することは困難です。 Java SE 7以降で有効な次の例は、重複したコードを排除します。
catch (IOException|SQLException e) {
logger.log(e);
throw e;
}
Catch節は、ブロックが処理できる例外のタイプを指定し、各例外タイプは縦棒(|)で区切られます。
Java.nio.fileパッケージ
Java.nio.file
パッケージとその関連パッケージであるJava.nio.file.attributeは、ファイルI/Oおよびファイルシステムへのアクセスの包括的なサポートを提供します。 JDK 7ではZipファイルシステムプロバイダーも利用できます。
ジョン・スキートが言ったことに加えて、ここに Java 7プロジェクトの概要 があります。これには機能のリストと説明が含まれています。
注:JDK 7は2011年7月28日にリリースされたため、公式の Java SEサイト にアクセスする必要があります。
言語の変更:
-Project Coin (small changes)
-switch on Strings
-try-with-resources
-diamond operator
ライブラリの変更:
-new abstracted file-system API (NIO.2) (with support for virtual filesystems)
-improved concurrency libraries
-elliptic curve encryption
-more incremental upgrades
プラットフォームの変更:
-support for dynamic languages
以下に、Java 7の新しく追加された機能を説明するリンクを示します。説明は、各機能の考えられる小さな例とともに非常に明確です。
汎用インスタンスの作成にDiamond(<>)演算子を使用する
Map<String, List<Trade>> trades = new TreeMap <> ();
Switchステートメントで文字列を使用する
String status= “something”;
switch(statue){
case1:
case2:
default:
}
数値リテラルの下線
int val 12_15; long phoneNo = 01917_999_720L;
「|」演算子を使用して複数の例外をスローするために単一のcatchステートメントを使用する
catch(IOException | NullPointerException ex){
ex.printStackTrace();
}
Java 7はtry-with-resourcesステートメントを提供するため、リソースをclose()する必要はありません。
try(FileOutputStream fos = new FileOutputStream("movies.txt");
DataOutputStream dos = new DataOutputStream(fos)) {
dos.writeUTF("Java 7 Block Buster");
} catch(IOException e) {
// log the exception
}
プレフィックスが「0b」または「0B」のバイナリリテラル