java.lang.* パッケージと java.util.* パッケージの拡張機能

次の項目について説明します。

Java SE 7 での拡張機能

さらに、次の拡張機能が導入されています。

分野: API:言語
Standard/Platform: Java SE 7
概要:カスタムクラスローダーが非循環式のクラスローダー委譲モデルに準拠していない場合は、クラスロード時にデッドロックが発生する可能性があります。クラスの並行ロード、およびクラスロード操作のためのより詳細なロックメカニズムをサポートするために、新しい API が java.lang.ClassLoader クラスに追加されました。カスタムクラスローダーでこの機能を活用するには、推奨モデルと要件について「Class Loader API Modifications for Deadlock Fix」ドキュメントを参照し、カスタムクラスローダーを適切に実装する必要があります。

分野: API:言語
Standard/Platform: JDK 7
概要: 以前は、javax.lang.model.type パッケージの 2 つの例外型 MirroredTypeExceptionMirroredTypesException は無関係でした。javac 実装では、MirroredTypesException がスローされるべきところで MirroredTypeException がスローされていました。この問題に対処するためもあって、MirroredTypeExceptionMirroredTypesException のサブクラスになりました。この変更はバイナリ互換であり、既存の注釈プロセッサの動作を通常は保持します。ただし、この変更によってクライアントプログラムのソースの互換性が失われる可能性があります。そのような場合は、catch 節の順序を変更することで、プログラムは再度コンパイル可能になるはずです。

分野: API:言語
Standard/Platform: JDK 7
概要: このリリースの言語の変更をモデル化するために、javax.lang.model.type.TypeVisitor インタフェースにメソッドが追加されるなど、いくつかの更新が javax.lang.model.* に加えられました。そのような追加により、TypeVisitor インタフェースを直接実装しているライブラリとはソースの互換性がなくなります。ただし、そのような追加はこの API の展開の一部として予見されていました。また、ライブラリはそのようなインタフェースを直接実装するのではなく、ユーティリティービジターの 1 つを拡張するよう、明示的に警告されていました。
RFE: 6933147

分野: API:言語
Standard/Platform: JDK 7
概要: メソッド Runtime.exec(String command, String[] envp, File dir) はコマンド文字列を、デフォルトの区切り文字セット (空白文字、タブ文字、改行文字、復帰改行文字、および用紙送り文字) を使用する呼び出し new StringTokenizer(command) によって、実行可能ファイルの名前とその引数で構成されるトークンに分割します。すなわち、このメソッドは空白を区切り文字として使用して、コマンド文字列をトークンに分割します。

Windows オペレーティングシステムでは、コマンドパラメータを空白文字で分割するとエラーになることがあります。特に、command パラメータに、空白を含む実行可能ファイルへのパスが含まれている場合、new StringTokenizer(command) の呼び出しによって、間違った実行可能ファイル名が抽出されます。たとえば、Runtime.getRuntime().exec("C:\\My Programs\\foo.exe bar") の呼び出しにより、引数 Programs\foo.exe および bar を指定してプログラム C:\My を起動しようとします。この呼び出しは、実行可能ファイル C:\My が見つからないことを示す例外で失敗する可能性があります。

従来のアプリケーションでセキュリティーマネージャーが使用されていない場合 (クラス SecurityManager を参照)、システムプロパティー jdk.lang.Process.allowAmbiguousCommandsfalse 以外の任意の値で指定することによって、空白を含むパス名を、メソッド Runtime.exec で正しく解析することができるようになります。(「The Java Tutorials」の「System Properties」を参照してください。)または、パス名を引用符で囲むこともできます。たとえば、Runtime.getRuntime().exec("\"C:\\My Programs\\foo.exe\" bar") の呼び出しにより、引数 bar を指定して C:\My Programs\foo.exe を起動しようとします。

:JDK 7u21 および 7u25 の場合、あいまいなコマンドを許可するシステムプロパティーの名前は jdk.lang.Process.allowAmbigousCommands です。

ただし、Runtime.getRuntime().exec(<path to batch or command file>) を起動して、 (Windows オペレーティングシステム上の) バッチ (.bat) またはコマンド (.cmd) ファイルを実行しようとするとき、そのファイルへのパスに次のいずれかの特殊文字が含まれる場合は、パス名を引用符で囲む必要があります。

<space>
&()[]{}~=;!"+,`~

これは次のようにして行うことができます。ここで、変数 f はクラス File のインスタンスです。

Process p = Runtime.getRuntime()
    .exec(new String[]{"\"" + f.getAbsolutePath() + "\""},
        null, f.getParentFile());

これは、Win32 CreateProcess 呼び出しが、.bat および .cmd ファイルを cmd /C コマンドプロセッサにリダイレクトしたあと、コマンドプロセッサがこれらを実行するためです。cmd /C コマンドでは、上記のいずれかの特殊文字を含むパスを引用符で囲む必要があります。

分野: API:ユーティリティー
Standard/Platform: JDK 7
概要: 以前は、java.util.TreeMap のエラーのため、空の TreeMaps および TreeSets に無効な null 要素や Comparable を実装していない要素を挿入できました。空の TreeMaps または TreeSets に無効な要素を 1 つだけ挿入できました。さらに要素を挿入すると、想定された NullPointerException または ClassCastException が発生していました。コレクションに対するほかの操作も、ほとんど失敗していました。JDK 7 以降は、空の TreeMap または TreeSet に無効な null 要素や Comparable を実装していない要素を挿入すると、NullPointerException がスローされます。RFE: 5045147

Java SE 6 での拡張機能

java.util

J2SE 5.0 での拡張機能

java.lang

java.lang.instrument

java.util

Java 2 SDK, v1.4 での拡張機能

java.lang

java.util.logging

java.util.prefs

Java 2 SDK, v1.3 での拡張機能

java.lang

java.util

java.util.jar
java.util.zip


Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.