Java SE 6.0 での JavaBeansTM コンポーネント API の拡張

java.beans

主な機能
修正されたバグ

主な機能

@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 つの目標が達成されます。

修正されたバグ

EventHandler クラス

6179222: EventHandler クラスで NullPointerException エラーが発生する可能性がある

EventHandler クラスから NPR 例外がスローされていました。EventHandler クラスの create メソッドが null 値をチェックします。Javadoc もそれに応じて修正されています。

6204552: EventHandler のドキュメントと例外処理の問題

EventHandler クラスの eventPropertyName 引数のドキュメントで、この引数のサポート内容が明確に説明されていませんでした。eventProperName プロパティーの機能に関する情報が、create メソッドのドキュメントに含められています。

6210265: EventHandler クラスは Method オブジェクトをキャッシュに書き込むべきでない

メソッドの検索が改善され、EventHandler クラスのフィールドへのメソッドの書き込みが禁止されています。

6271692: EventHandler クラスのターゲットプロパティーがイベントプロパティーと同じ構文をサポートしていた

ターゲットプロパティーの構文が修正され、任意の数のメソッドまたはプロパティーをサポートするようになりました。これは、「.」で各プロパティーまたはメソッドを区切ることによって実現されました。

 

XMLEncoder クラス

長期持続性プロセスを改善するために行われた修正を、次に示します。

6245149: java.beans.XMLEncoder クラスが java.net.URI オブジェクトをエンコードしない

java.net.URI クラスの修飾子 private を持つあるメンバーに、Statement クラスからアクセスできませんでした。JDK 6.0 ではこの問題を解決するために、適切な PersistenceDelegate が提供されています。

4921212: XMLEncoder クラスが HashMap オブジェクト内の null エントリをエンコードしない

HashMap オブジェクトの Key エントリが null の場合、そのエントリが XML 出力内に含められていませんでした。この修正では、null Key エントリが XML ファイルに含められます。

6256805: XMLEncoder クラスが無効な XML を出力する

XMLEncoder クラスによって XML 出力が生成されるのは、有効な XML 文字に対してだけです。文字要素に新しい code 属性が導入されました。code には、先頭が「#」の場合は 16 進値が格納されています。そうでない場合、それには 10 進値が格納されています。

5015403: XMLEncoder クラスが列挙を正しくエンコードしない

XMLEncoder クラスによる列挙の直列化が正しく行われていませんでした。新しい持続性委譲である EnumPersistenceDelegate クラスは、列挙クラスの直列化をサポートするために導入されました。

4741757: XMLEncoder クラスを Java Web Start とともに使用すると、持続性委譲が無視される

一部のクラスの DefaultPersistenceDelegate クラスが正しく作成されていませんでした。その結果、プロパティーのフィールドアクセスを追加して JavaBeans 仕様に違反するハックが、検出されていました。実行された修正により、次のクラスを対象としたハックが削除されました。java.awt.Dimensionjava.awt.Point、および java.awt.Rectangle

6338070: read() メソッドが呼び出されないかぎり、XMLDecoder クラスが所有者に対する文を無視する

最初、XMLDecoder クラスは遅延初期化を使って作成されていました。この修正により、readObject() メソッドによってファイルが解析されていなくても close() メソッド内での解析が可能となります。

6341798: トルコ語ロケールの使用時に XMLDecoder クラスが失敗する

ロケールがトルコ語に設定されたマシン上で英語の XML ファイルを読み取る際に、XMLDecoder クラスが正しく機能しませんでした。このバグを修正するために、toLowerCase および toUpperCase メソッドが英語ロケールで呼び出されます。

6437265: XML 直列化中にいくつかの Component オブジェクトが欠落する

Container オブジェクトが直列化されていませんでした。この修正により、BorderLayout を持つコンテナの持続性委譲に特殊な動作が追加されます。

 

 

 

 

 


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