それは「ただの」ものではHashMap
ないからです。javadocに記載されているように、次の特定の機能を備えたカスタマイズされたマップです。
返される実装は、標準およびオプションのすべての Map メソッドをサポートし、さらに次の追加要件をサポートする必要があります。
- 実装では、インターフェイス
Map
を実装する必要がありjava.io.Serializable
ます。
null
キーまたは値を追加しようとすると、 NullPointerException
.
- ではないキーを追加しようとすると、
String
必ずClassCastException
.
- キーとして指定された属性名が this
UIComponent
の実装クラスのプロパティと一致する場合、次のメソッドは特別な動作をします:
containsKey
- 返品false
。
get()
- プロパティが読み取り可能な場合は、getter メソッドを呼び出して、返された値を返します (対応するラッパー クラスでプリミティブ値をラップします)。それ以外の場合はスローしIllegalArgumentException
ます。
put()
- プロパティが書き込み可能な場合は、setter メソッドを呼び出して、対応する値を設定します (対応するラッパー クラスでプリミティブ値をアンラップします)。プロパティが書き込み可能でない場合、またはプリミティブ型のプロパティを に設定しようとした場合はnull
、 をスローしIllegalArgumentException
ます。
remove
- 投げIllegalArgumentException
ます。
特にget()
は特別です。マップキーに関連付けられた値を「単に」返すのではなく、実際には現在のコンポーネントで getter メソッドを呼び出します (たとえばcomponent.getFoo()
、component.getAttributes().get("foo")
が要求された場合)。これらのゲッター メソッドは通常、StateHelper
.
setAttributes()
をオーバーライドすると、このコントラクトが破られ、JSF コンポーネント ツリー全体が機能しなくなる可能性があります。