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