Java SE 6.0でのJavaBeansコンポーネント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, 2020, Oracle and/or its affiliates. All rights reserved.