インタフェースAttributeMapper<A extends Attribute<A>>
- 型パラメータ:
A
- 属性の型
public interface AttributeMapper<A extends Attribute<A>>
属性の
class
ファイル表現とそのAPIモデルの間の双方向マッパー。 属性マッパーは、そのnameによって属性を識別し、class
ファイル表現をモデルに解析し、モデル表現をclass
ファイルに書き戻すために使用されます。
Attributes
は、JVMS内の事前定義済属性のマッパーおよび特定の従来型属性を定義します。 他の属性(JVMS 4.7.1)の場合、ユーザーは独自のAttributeMapper
を定義できます。これらの属性をモデル化するクラスは、CustomAttribute
を拡張する必要があります。 これらの属性を読み取るには、ユーザー定義のAttributeMapper
をClassFile.AttributeMapperOption
に登録する必要があります。
- 導入されたバージョン:
- 24
- 関連項目:
-
ネストされたクラスのサマリー
ネストされたクラス -
メソッドのサマリー
修飾子と型メソッド説明default boolean
この属性が1つの構造で複数回出現するかどうかを返します。name()
属性の名前を返します。readAttribute
(AttributedElement enclosing, ClassReader cf, int pos) クラス・ファイルAPIのclass
ファイルからAttribute
インスタンスを作成します。class
ファイルに対するこの属性のデータ依存性を返します。void
writeAttribute
(BufWriter buf, A attr) Attribute
インスタンスをクラス・ファイルAPIのclass
ファイルに書き込みます。
-
メソッドの詳細
-
name
-
readAttribute
A readAttribute(AttributedElement enclosing, ClassReader cf, int pos) クラス・ファイルAPIのclass
ファイルからAttribute
インスタンスを作成します。このメソッドは、属性の読取りをサポートするためにクラス・ファイルAPIによってコールされます。 ユーザーは、このメソッドをコールしないでください。
Class-File APIは、このメソッドへの呼び出しに関して次の約束を行います:
- 属性の名前の
Utf8Entry
には、cf.readEntry(pos - 6, Utf8Entry.class)
を使用してアクセスでき、検証されます - 属性の長さは
cf.readInt(pos - 4)
でアクセスでき、class
ファイルの長さを超えない正であることが検証されます enclosing
モデルのAttributedElement
属性アクセス機能は、このメソッドがコールされるときにはアクセスできませんが、後で戻された属性からユーザーがアクセスできるときにアクセスできます。
返される
Attribute
は、次の要件を満たす必要があります:Attribute.attributeMapper()
はこのマッパーを返しますAttribute.attributeName()
は、class
ファイル内の属性名を返します。
- APIのノート:
- このメソッドの実装では、結果の属性が使用されない場合でもこのメソッドが呼び出されるため、属性を戻すための最小限の作業を実行する必要があります。 特に、実装では、属性
class
ファイル・データの有効性をチェックしたり、例外をスローする可能性のあるアクションを実行しないようにする必要があります。 - パラメータ:
enclosing
- この属性が表示される構造cf
- 読取り元のclass
ファイルへのアクセスを提供pos
- 属性の内容が開始されるclass
ファイルへのオフセット- 戻り値:
- read属性
- 属性の名前の
-
writeAttribute
Attribute
インスタンスをクラス・ファイルAPIのclass
ファイルに書き込みます。このメソッドは、属性の書込みをサポートするためにClass-File APIによってコールされます。 ユーザーは、このメソッドをコールしないでください。
Class-File APIは、このメソッドへの呼び出しに関して次の約束を行います:
attr.attributeMapper()
はこのマッパーを返しますbuf
のsize
が0
でない可能性があるため、すでにデータが書き込まれている可能性があります。
class
ファイルの書込みは、次の要件を満たす必要があります:- 属性名
u2
および属性長u4
は、buf
に書き込む必要があります attr.attributeName()
は、buf.writeIndex(attr.attributeName())
のように書き込まれます- 属性の長さは、
buf
に書き込まれる属性内容の長さ(バイト単位)で、名前と長さによって使用される6バイトは含まれません - 属性
attr
のAPIモデル内の情報を属性のclass
ファイル形式で表すことができない場合は、IllegalArgumentException
がスローされます。
- APIのノート:
BufWriter.patchInt(int, int, int)
を使用して、属性の内容がbuf
に書き込まれた後の属性長を更新できます。- パラメータ:
buf
- 属性の書込み先となるBufWriter
attr
- 書き込む属性- スロー:
IllegalArgumentException
- 属性のAPIモデルの一部のデータがclass
ファイル形式に対して無効な場合
-
allowMultiple
default boolean allowMultiple()この属性が1つの構造で複数回出現するかどうかを返します。1つの属性で1つの構造内の複数のインスタンスを許可せず、
ClassFileBuilder
に指定でき、その属性の複数のインスタンスがビルダーに指定されている場合、最後に指定された属性がビルド構造に表示されます。- 実装要件:
- デフォルトの実装では
false
を返します。 - 戻り値:
- この属性が1つの構造で複数回出現するかどうか
-
stability
AttributeMapper.AttributeStability stability()class
ファイルに対するこの属性のデータ依存性を返します。- 戻り値:
class
ファイルに対するこの属性のデータ依存性
-