- すべての実装されたインタフェース:
AnnotatedElement
- 直系の既知のサブクラス:
Executable,Field
AccessibleObjectクラスは、Field、Method、およびConstructorオブジェクト(「リフレクトされたオブジェクト」と呼ばれる)の基本クラスです。 それは、Java言語のアクセス制御が使用されているときの抑制チェックとして、リフレクトされたオブジェクトにフラグを立てる機能を提供します。 これにより、通常は禁止されるような方法でオブジェクトを操作するのに十分な特権を持つ洗練されたアプリケーション(Java Object Serializationやその他の永続化メカニズムなど)が可能になります。
Java言語アクセス制御では、トップレベル・クラス外部のプライベート・メンバー、パッケージ・アクセス外部のメンバー、パッケージまたはサブクラス外の保護されたメンバー、およびそれらがexportedパッケージとユーザーreadsモジュールで宣言されていないかぎり、そのモジュール外のパブリック・メンバーを使用できません。 デフォルトでは、Fieldの時(1つのバリエーションで)、Method、またはConstructorを使用して、フィールドを取得または設定したり、メソッドを呼び出したり、クラスの新しいインスタンスを作成して初期化したりするときに、Java言語のアクセス制御が(1つのバリエーションで)適用されます。 すべてのリフレクトされたオブジェクトは、それを使用するコードが適切なクラス、パッケージ、またはモジュールにあるかどうかをチェックします。 スタック上にJavaクラスがない「JNIコード」により起動された場合のチェックは、メンバーと宣言しているクラスがパブリックであり、すべてのモジュールにエクスポートされるパッケージ内にクラスがある場合にのみ成功します。
Java言語のアクセス制御からの1つのバリエーションは、リフレクトされたオブジェクトによるチェックが可読性を持つことです。 つまり、リフレクトされたオブジェクトの使用を含むモジュールは、基礎となるフィールド、メソッド、またはコンストラクタが宣言されているモジュールを読み込むとみなされます。
Java言語のアクセス制御のためのチェックが(アクセスを有効にできるかどうか)を抑制することができるかどうかは、リフレクトされたオブジェクトは、エクスポートまたはオープン・パッケージ(setAccessible(boolean)を参照してください)のメンバーに対応するかどうかに依存します。
- Java言語仕様を参照してください:
-
6.6 アクセス制御
- 導入されたバージョン:
- 1.2
-
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
修飾子と型メソッド説明final boolean呼び出し元がこのリフレクトされたオブジェクトにアクセスできるかどうかをテストします。<T extends Annotation>
TgetAnnotation(Class<T> annotationClass) 存在する場合は、この要素の指定された型の注釈を返し、そうでない場合はnullを返します。この要素に存在する注釈を返します。<T extends Annotation>
T[]getAnnotationsByType(Class<T> annotationClass) この要素に関連付けられている注釈を返します。<T extends Annotation>
TgetDeclaredAnnotation(Class<T> annotationClass) 直接存在する場合は、この要素の指定された型の注釈を返し、そうでない場合はnullを返します。この要素に直接存在する注釈を返します。<T extends Annotation>
T[]getDeclaredAnnotationsByType(Class<T> annotationClass) 直接存在するか間接的に存在する場合は、この要素の指定された型の注釈を返します。boolean非推奨。このメソッドは、Java言語のアクセス制御のチェックが抑制されているかどうかを実際に示しているときに、反映されたオブジェクトにアクセス可能かどうかを調べるというヒントを持つため、非推奨です。booleanisAnnotationPresent(Class<? extends Annotation> annotationClass) 指定された型の注釈がこの要素に存在する場合はtrueを返し、そうでない場合はfalseを返します。voidsetAccessible(boolean flag) このリフレクトされたオブジェクトのaccessibleフラグを、指定されたブール値に設定します。static voidsetAccessible(AccessibleObject[] array, boolean flag) 単一のセキュリティ・チェック(効率化のため)でリフレクトされたオブジェクトの配列のaccessibleフラグを設定する便利なメソッド。final boolean可能であれば、このリフレクトされたオブジェクトのaccessibleフラグをtrueに設定します。
-
コンストラクタの詳細
-
AccessibleObject
@Deprecated(since="17") protected AccessibleObject()非推奨。コンストラクタで、Java仮想マシンだけが使用します。
-
-
メソッドの詳細
-
setAccessible
public static void setAccessible(AccessibleObject[] array, boolean flag) 単一のセキュリティ・チェック(効率化のため)でリフレクトされたオブジェクトの配列のaccessibleフラグを設定する便利なメソッド。このメソッドは、各リフレクトされたオブジェクトへのアクセスを
setAccessible(boolean)で指定されたとおりに有効にできるときに、配列内のすべてのリフレクトされたオブジェクトにアクセスできるようにするために使用できます。セキュリティ・マネージャがある場合、その
checkPermissionメソッドは最初にReflectPermission("suppressAccessChecks")パーミッションで呼び出されます。入力
arrayのいずれかの要素がクラスjava.lang.ClassのConstructorオブジェクトであり、flagがtrueである場合、SecurityExceptionもスローされます。- パラメータ:
array- AccessibleObjectの配列flag- 各オブジェクトのaccessibleフラグの新しい値- throws:
InaccessibleObjectException- アレイ内のすべてのオブジェクトに対してアクセスを有効にできない場合SecurityException- リクエストがセキュリティ・マネージャによって拒否された場合、または配列内の要素がjava.lang.Classのコンストラクタである場合- 関連項目:
-
setAccessible
public void setAccessible(boolean flag) このリフレクトされたオブジェクトのaccessibleフラグを、指定されたブール値に設定します。trueの値は、リフレクトされたオブジェクトが使用されたときに、Java言語のアクセス制御のチェックを抑制すべきであることを示します。falseの値は、リフレクトされたオブジェクトが、使用時にJava言語のアクセス制御をチェックし、クラスの説明に記載されているバリエーションを適用する必要があることを示します。このメソッドは、
Cクラスの呼び出し側がdeclaring classDのmemberへのアクセスを可能にするために使用されます:-
CとDは同じモジュールにあります。 - メンバーは
publicであり、Dはパッケージ内のpublicであり、Dexportsを含むモジュールは少なくともCを含むモジュールに含まれます。 - メンバーは
protectedstatic、Dはパッケージ内のpublicであり、Dを含むモジュールは少なくともCを含むモジュールにエクスポートし、CはDのサブクラスです。 -
Dは、少なくともCを含むモジュールにDopensを含むモジュールがパッケージされています。 名前のないモジュールとオープン・モジュールのすべてのパッケージはすべてのモジュールに対してオープンであるため、このメソッドは、Dが名前のないモジュールまたはオープン・モジュールにあるときには常に成功します。
このメソッドは、宣言クラスが呼び出し元とは異なるモジュールにあり、宣言クラスを含むパッケージが呼び出し元に対して開かれていない場合に、privateメンバー、デフォルト(package)アクセスを持つメンバー、保護されたインスタンス・メンバー、または保護されたコンストラクタ・モジュール。
このメソッドを使用して、non-modifiable最終フィールドへのwriteアクセスを有効にすることはできません。 次のフィールドは変更できません:
trueがJava言語アクセス制御チェックを抑制して、これらの変更不可能な最終フィールドへのreadアクセスのみを有効にする場合のaccessibleフラグ。セキュリティ・マネージャがある場合、その
checkPermissionメソッドは最初にReflectPermission("suppressAccessChecks")パーミッションで呼び出されます。- パラメータ:
flag-accessibleフラグの新しい値- throws:
InaccessibleObjectException- アクセスを有効にできない場合SecurityException- リクエストがセキュリティ・マネージャによって拒否された場合- 関連項目:
-
-
trySetAccessible
public final boolean trySetAccessible()可能であれば、このリフレクトされたオブジェクトのaccessibleフラグをtrueに設定します。 このメソッドは、accessibleフラグを、setAccessible(true)を呼び出すように設定し、accessibleフラグのために更新された値を返します。 アクセスを有効にできない、つまりチェックやJava言語のアクセス制御を抑制できない場合、このメソッドはfalse(setAccessible(true)が失敗したときにInaccessibleObjectExceptionをスローするのではなく)を返します。このリフレクトされたオブジェクトの
accessibleフラグがtrueの場合、このメソッドはno-opです。たとえば、呼び出し側は、
Methodオブジェクトが呼び出されたときにJava言語アクセス制御のチェックを抑制するために、MethodオブジェクトのtrySetAccessibleオブジェクトをプライベート・インスタンス・メソッドp.T::privateMethodに対して呼び出すことができます。p.Tクラスが呼び出し元とは異なるモジュールにあり、パッケージpが少なくとも呼び出し元モジュールに対して開いている場合、以下のコードはaccessibleフラグをtrueに設定します。p.T obj = ....; // instance of p.T : Method m = p.T.class.getDeclaredMethod("privateMethod"); if (m.trySetAccessible()) { m.invoke(obj); } else { // package p is not opened to the caller to access private member of T ... }セキュリティ・マネージャがある場合、その
checkPermissionメソッドは最初にReflectPermission("suppressAccessChecks")パーミッションで呼び出されます。- 戻り値:
accessibleフラグがtrueに設定されている場合、true;falseアクセスを有効にできない場合false。- throws:
SecurityException- リクエストがセキュリティ・マネージャによって拒否された場合- 導入されたバージョン:
- 9
- 関連項目:
-
isAccessible
@Deprecated(since="9") public boolean isAccessible()非推奨。このメソッドは、Java言語のアクセス制御のチェックが抑制されているかどうかを実際に示しているときに、反映されたオブジェクトにアクセス可能かどうかを調べるというヒントを持つため、非推奨です。 このメソッドは、呼び出し元がアクセス可能なリフレクトされたオブジェクトに対してfalseを返します。 この反射オブジェクトがアクセス可能かどうかをテストするには、canAccess(Object)を使用する必要があります。このリフレクトされたオブジェクトのaccessibleフラグの値を取得します。- 戻り値:
- オブジェクトの
accessibleフラグの値
-
canAccess
public final boolean canAccess(Object obj) 呼び出し元がこのリフレクトされたオブジェクトにアクセスできるかどうかをテストします。 このリフレクトされたオブジェクトがインスタンス・メソッドまたはフィールドに対応する場合、このメソッドは呼び出し元がリフレクトされたオブジェクトで指定されたobjにアクセスできるかどうかをテストします。 例えばメソッドやフィールドの場合、obj引数はdeclaring classのインスタンスでなければなりません。 静的メンバーとコンストラクタの場合、objはnullでなければなりません。このメソッドは、
accessibleフラグがtrueに設定されている場合、つまりJava言語アクセス制御のチェックが抑制されている場合、または「Java言語仕様」で指定されているように呼出し側がメンバーにアクセスできる場合にtrueを返します(クラスの説明にはバリエーションが記載されています)。- パラメータ:
obj- インスタンス・メソッドまたはフィールドの場合、このリフレクトされたオブジェクトの宣言クラスのインスタンス・オブジェクト- 戻り値:
- 呼び出し元がこのリフレクトされたオブジェクトにアクセスできる場合は
true。 - throws:
IllegalArgumentException-- このリフレクトされたオブジェクトが静的メンバーまたはコンストラクタであり、指定された
objが非nullの場合、または - このリフレクトされたオブジェクトがインスタンス・メソッドまたはフィールドであり、指定された
objがnullであるか、メンバーのdeclaring classのサブクラスではない型の場合。
- このリフレクトされたオブジェクトが静的メンバーまたはコンストラクタであり、指定された
- Java言語仕様を参照してください:
-
6.6 アクセス制御
- 導入されたバージョン:
- 9
- 関連項目:
-
getAnnotation
public <T extends Annotation> T getAnnotation(Class<T> annotationClass) 存在する場合は、この要素の指定された型の注釈を返し、そうでない場合はnullを返します。このメソッドによって返される注釈は宣言注釈であることに注意してください。
- 定義:
getAnnotation、インタフェースAnnotatedElement- 実装要件:
- デフォルトの実装では
UnsupportedOperationExceptionがスローされます。サブクラスはこのメソッドをオーバーライドする必要があります。 - 型パラメータ:
T- 照会し、存在する場合に返す注釈の型。- パラメータ:
annotationClass- 注釈型に対応するClassオブジェクト- 戻り値:
- 存在する場合は、この要素の指定された注釈型の注釈。そうでない場合はnull
- throws:
NullPointerException- 指定された注釈クラスがnullの場合- 導入されたバージョン:
- 1.5
-
isAnnotationPresent
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) 指定された型の注釈がこの要素に存在する場合はtrueを返し、そうでない場合はfalseを返します。 このメソッドは、主にマーカー注釈への簡易アクセスを目的に設計されています。このメソッドによって返されるtrue値は、
getAnnotation(annotationClass) != nullと同等です。- 定義:
isAnnotationPresent、インタフェースAnnotatedElement- パラメータ:
annotationClass- 注釈型に対応するClassオブジェクト- 戻り値:
- 指定された注釈型の注釈がこの要素に存在する場合はtrue、そうでない場合はfalse
- throws:
NullPointerException- 指定された注釈クラスがnullの場合- 導入されたバージョン:
- 1.5
-
getAnnotationsByType
public <T extends Annotation> T[] getAnnotationsByType(Class<T> annotationClass) この要素に関連付けられている注釈を返します。 この要素に関連付けられている注釈がない場合、戻り値は長さ0の配列です。 このメソッドとAnnotatedElement.getAnnotation(Class)の違いは、引数が「繰返し可能な注釈タイプ」 (JLS 9.6)であるかどうかをこのメソッドが検出し、その場合、"検索"がコンテナ注釈を使用してそのタイプの注釈を検索しようとすることです。 このメソッドの呼出し元は、返された配列を自由に変更することができ、これはほかの呼出し元に返された配列に影響を及ぼしません。このメソッドによって返される注釈は宣言注釈であることに注意してください。
- 定義:
getAnnotationsByType、インタフェースAnnotatedElement- 実装要件:
- デフォルトの実装では
UnsupportedOperationExceptionがスローされます。サブクラスはこのメソッドをオーバーライドする必要があります。 - 型パラメータ:
T- 照会し、存在する場合に返す注釈の型。- パラメータ:
annotationClass- 注釈型に対応するClassオブジェクト- 戻り値:
- この要素に関連付けられている場合は、この要素の指定された注釈型のすべての注釈。そうでない場合は長さ0の配列
- throws:
NullPointerException- 指定された注釈クラスがnullの場合- 導入されたバージョン:
- 1.8
-
getAnnotations
public Annotation[] getAnnotations()この要素に存在する注釈を返します。 この要素に存在する注釈がない場合、戻り値は長さ0の配列です。 このメソッドの呼出し元は、返された配列を自由に変更することができ、これはほかの呼出し元に返された配列に影響を及ぼしません。このメソッドによって返される注釈は宣言注釈であることに注意してください。
- 定義:
getAnnotations、インタフェースAnnotatedElement- 戻り値:
- この要素に存在する注釈
- 導入されたバージョン:
- 1.5
-
getDeclaredAnnotation
public <T extends Annotation> T getDeclaredAnnotation(Class<T> annotationClass) 直接存在する場合は、この要素の指定された型の注釈を返し、そうでない場合はnullを返します。 このメソッドは継承された注釈を無視します。 (この要素に直接存在する注釈がない場合は、nullを返します。)このメソッドによって返される注釈は宣言注釈であることに注意してください。
- 定義:
getDeclaredAnnotation、インタフェースAnnotatedElement- 型パラメータ:
T- 照会し、直接存在する場合に返す注釈の型。- パラメータ:
annotationClass- 注釈型に対応するClassオブジェクト- 戻り値:
- 直接存在する場合は、この要素の指定された注釈型の注釈。そうでない場合はnull
- throws:
NullPointerException- 指定された注釈クラスがnullの場合- 導入されたバージョン:
- 1.8
-
getDeclaredAnnotationsByType
public <T extends Annotation> T[] getDeclaredAnnotationsByType(Class<T> annotationClass) 直接存在するか間接的に存在する場合は、この要素の指定された型の注釈を返します。 このメソッドは継承された注釈を無視します。 この要素に直接または間接的に存在する指定された注釈がない場合、戻り値は長さ0の配列です。 このメソッドとAnnotatedElement.getDeclaredAnnotation(Class)の違いは、引数が「繰返し可能な注釈タイプ」 (JLS 9.6)であるかどうかをこのメソッドが検出し、ある場合は"検索"がコンテナ注釈(存在する場合)を検出しようとする点です。 このメソッドの呼出し元は、返された配列を自由に変更することができ、これはほかの呼出し元に返された配列に影響を及ぼしません。このメソッドによって返される注釈は宣言注釈であることに注意してください。
- 定義:
getDeclaredAnnotationsByType、インタフェースAnnotatedElement- 型パラメータ:
T- 照会し、直接または間接的に存在する場合に返す注釈の型。- パラメータ:
annotationClass- 注釈型に対応するClassオブジェクト- 戻り値:
- この要素に直接または間接的に存在する場合は、この要素の指定された注釈型のすべての注釈。そうでない場合は長さ0の配列
- throws:
NullPointerException- 指定された注釈クラスがnullの場合- 導入されたバージョン:
- 1.8
-
getDeclaredAnnotations
public Annotation[] getDeclaredAnnotations()この要素に直接存在する注釈を返します。 このメソッドは継承された注釈を無視します。 この要素に直接存在する注釈がない場合、戻り値は長さ0の配列です。 このメソッドの呼出し元は、返された配列を自由に変更することができ、これはほかの呼出し元に返された配列に影響を及ぼしません。このメソッドによって返される注釈は宣言注釈であることに注意してください。
- 定義:
getDeclaredAnnotations、インタフェースAnnotatedElement- 実装要件:
- デフォルトの実装では
UnsupportedOperationExceptionがスローされます。サブクラスはこのメソッドをオーバーライドする必要があります。 - 戻り値:
- この要素に直接存在する注釈
- 導入されたバージョン:
- 1.5
-