@ConstructorProperties 注釈Java SE 6.0 では、注釈対象コンストラクタのパラメータとオブジェクトのプロパティーとの対応関係を示すために、@ConstructorProperties 注釈が導入されました。以前は、コンストラクタ DefaultPersistenceDelegate(String[] constructorPropertyNames) が同じ目的で使用されていましたが、これは、ライブラリクラスにとって適切なアプローチではありませんでした。
技術的には、読み取り専用プロパティーを含む Bean をコピーするために注釈が使用されます。次のコード例では、Food のプロパティーが読み取り専用になっています。
public class Food {
private final int varieties;
private final String country;
@ConstructorProperties({"varieties", "country"})
public Point(int varieties, String country) {
this.varieties = varieties;
this.country = country;
}
public int getVarieties() {
return this.varieties;
}
public String getCountry() {
return this.country;
}
}
fruit オブジェクトと同じプロパティーを持つ vegetable オブジェクトを作成するには、次のコードを使用します。
Food fruit = new Food (5, "Argentina"); Food vegetable = new Food (fruit.getVarieties(), fruit.getCountry());この注釈を定義すると、次の 2 つの目標が達成されます。
DefaultPersistenceDelegate クラスを明示的に使用しないですむようにする。EventHandler クラスで NullPointerException エラーが発生する可能性があるEventHandler クラスから NPR 例外がスローされていました。EventHandler クラスの create メソッドが null 値をチェックします。Javadoc もそれに応じて修正されています。
EventHandler クラスの eventPropertyName 引数のドキュメントで、この引数のサポート内容が明確に説明されていませんでした。eventProperName プロパティーの機能に関する情報が、create メソッドのドキュメントに含められています。
EventHandler クラスは Method オブジェクトをキャッシュに書き込むべきでないメソッドの検索が改善され、EventHandler クラスのフィールドへのメソッドの書き込みが禁止されています。
EventHandler クラスのターゲットプロパティーがイベントプロパティーと同じ構文をサポートしていたターゲットプロパティーの構文が修正され、任意の数のメソッドまたはプロパティーをサポートするようになりました。これは、「.」で各プロパティーまたはメソッドを区切ることによって実現されました。
XMLEncoder クラス長期持続性プロセスを改善するために行われた修正を、次に示します。
java.beans.XMLEncoder クラスが java.net.URI オブジェクトをエンコードしないjava.net.URI クラスの修飾子 private を持つあるメンバーに、Statement クラスからアクセスできませんでした。JDK 6.0 ではこの問題を解決するために、適切な PersistenceDelegate が提供されています。
XMLEncoder クラスが HashMap オブジェクト内の null エントリをエンコードしないHashMap オブジェクトの Key エントリが null の場合、そのエントリが XML 出力内に含められていませんでした。この修正では、null Key エントリが XML ファイルに含められます。
XMLEncoder クラスが無効な XML を出力するXMLEncoder クラスによって XML 出力が生成されるのは、有効な XML 文字に対してだけです。文字要素に新しい code 属性が導入されました。code には、先頭が「#」の場合は 16 進値が格納されています。そうでない場合、それには 10 進値が格納されています。
XMLEncoder クラスが列挙を正しくエンコードしないXMLEncoder クラスによる列挙の直列化が正しく行われていませんでした。新しい持続性委譲である EnumPersistenceDelegate クラスは、列挙クラスの直列化をサポートするために導入されました。
XMLEncoder クラスを Java Web Start とともに使用すると、持続性委譲が無視される一部のクラスの DefaultPersistenceDelegate クラスが正しく作成されていませんでした。その結果、プロパティーのフィールドアクセスを追加して JavaBeans 仕様に違反するハックが、検出されていました。実行された修正により、次のクラスを対象としたハックが削除されました。java.awt.Dimension、java.awt.Point、および java.awt.Rectangle。
read() メソッドが呼び出されないかぎり、XMLDecoder クラスが所有者に対する文を無視する最初、XMLDecoder クラスは遅延初期化を使って作成されていました。この修正により、readObject() メソッドによってファイルが解析されていなくても close() メソッド内での解析が可能となります。
XMLDecoder クラスが失敗するロケールがトルコ語に設定されたマシン上で英語の XML ファイルを読み取る際に、XMLDecoder クラスが正しく機能しませんでした。このバグを修正するために、toLowerCase および toUpperCase メソッドが英語ロケールで呼び出されます。
Component オブジェクトが欠落するContainer オブジェクトが直列化されていませんでした。この修正により、BorderLayout を持つコンテナの持続性委譲に特殊な動作が追加されます。