@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を持つコンテナの持続性委譲に特殊な動作が追加されます。