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