- java.lang.Object
-
- java.lang.reflect.AccessibleObject
-
- すべての実装されたインタフェース:
AnnotatedElement
- 直系の既知のサブクラス:
Executable,Field
public class AccessibleObject extends Object implements AnnotatedElement
AccessibleObjectクラスは、Field、MethodおよびConstructorオブジェクト(反射オブジェクトと呼ばれる)のベース・クラスです。 これにより、反射されたオブジェクトが使用されるときにJava言語アクセス制御のチェックを抑制するようにフラグを付けることができます。 これにより、Javaオブジェクトのシリアライズやその他の永続性メカニズムなど、十分な権限を持つ高度なアプリケーションで、通常は禁止される方法でオブジェクトを操作できます。Java言語アクセス制御では、トップレベル・クラス外部のプライベート・メンバー、パッケージ・アクセス外部のメンバー、パッケージまたはサブクラス外の保護されたメンバー、およびそれらが
exportedパッケージとユーザーreadsモジュールで宣言されていないかぎり、そのモジュール外のパブリック・メンバーを使用できません。 デフォルトでは、Field、MethodまたはConstructorを使用してフィールドを取得または設定したり、メソッドを呼び出したり、クラスの新しいインスタンスを作成および初期化したりする場合、Java言語アクセス制御は(1つのバリエーションで)適用されます。 すべてのリフレクト・オブジェクトは、それを使用するコードが適切なクラス、パッケージまたはモジュール内にあることをチェックします。Java言語アクセス制御の1つの違いは、反射オブジェクトによるチェックが可読性を前提としていることです。 つまり、リフレクト・オブジェクトの使用を含むモジュールは、基礎となるフィールド、メソッドまたはコンストラクタが宣言されているモジュールを読み取ると想定されます。
Java言語アクセス制御のチェックを抑制できるかどうか(つまり、アクセスを有効にできるかどうか)は、反映されたオブジェクトがエクスポートされたパッケージまたはオープン・パッケージのメンバーに対応しているかどうかによって異なります(
setAccessible(boolean)を参照)。- 導入されたバージョン:
- 1.2
- The Java™Language Specificationを参照してください。
- 6.6 アクセス制御
-
-
コンストラクタのサマリー
コンストラクタ 修飾子 コンストラクタ 説明 protectedAccessibleObject()コンストラクタで、Java仮想マシンだけが使用します。
-
メソッドのサマリー
すべてのメソッド staticメソッド インスタンス・メソッド 具象メソッド 非推奨のメソッド 修飾子と型 メソッド 説明 booleancanAccess(Object obj)呼出し側がこの反射オブジェクトにアクセスできるかどうかをテストします。<T extends Annotation>
TgetAnnotation(Class<T> annotationClass)存在する場合は、この要素の指定された型の注釈を返し、そうでない場合はnullを返します。Annotation[]getAnnotations()この要素に存在する注釈を返します。<T extends Annotation>
T[]getAnnotationsByType(Class<T> annotationClass)この要素に関連付けられている注釈を返します。<T extends Annotation>
TgetDeclaredAnnotation(Class<T> annotationClass)直接存在する場合は、この要素の指定された型の注釈を返し、そうでない場合はnullを返します。Annotation[]getDeclaredAnnotations()この要素に直接存在する注釈を返します。<T extends Annotation>
T[]getDeclaredAnnotationsByType(Class<T> annotationClass)直接存在するか間接的に存在する場合は、この要素の指定された型の注釈を返します。booleanisAccessible()非推奨。このメソッドは、Java言語アクセス制御のチェックが抑制されているかどうかを実際に示したときに、反映されたオブジェクトがアクセス可能かどうかを確認する名前のヒントとなるため、非推奨です。booleanisAnnotationPresent(Class<? extends Annotation> annotationClass)指定された型の注釈がこの要素に存在する場合はtrueを返し、そうでない場合はfalseを返します。voidsetAccessible(boolean flag)この反射オブジェクトのaccessibleフラグを指定されたブール値に設定します。static voidsetAccessible(AccessibleObject[] array, boolean flag)単一のセキュリティ・チェックを使用して、反射オブジェクトの配列にaccessibleフラグを設定する便利なメソッド(効率化のため)。booleantrySetAccessible()可能な場合は、この反映オブジェクトのaccessibleフラグをtrueに設定します。
-
-
-
メソッドの詳細
-
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フラグの新しい値- 例外:
InaccessibleObjectException- 配列内のすべてのオブジェクトに対してアクセスを有効にできない場合SecurityException- リクエストがセキュリティ・マネージャによって拒否されるか、配列内の要素がjava.lang.Classのコンストラクタである場合- 関連項目:
SecurityManager.checkPermission(java.security.Permission),ReflectPermission
-
setAccessible
public void setAccessible(boolean flag)
この反射オブジェクトのaccessibleフラグを指定されたブール値に設定します。 値trueは、Java言語アクセス制御が使用されている場合に、反映されたオブジェクトがチェックを抑制することを示します。 値falseは、クラスの説明に示されているバリエーションを使用して、反映されたオブジェクトが使用されるときにJava言語アクセス制御のチェックを強制する必要があることを示します。このメソッドは、次のいずれかに当てはまる場合に、クラス
Cのコール元がmemberのdeclaring classDへのアクセスを有効にするために使用できます。-
CとDは同じモジュールにあります。 - メンバーは
publicで、Dはパッケージ内のpublicで、Dexportsを含むモジュールは、少なくともCを含むモジュールです。 - メンバーは
protectedstatic、Dはpublicで、Dを含むモジュールはCを含む少なくともモジュールにエクスポートし、CはDのサブクラスです。 -
Dは、Dopensを含むモジュールから、少なくともCを含むモジュールへのパッケージに含まれています。 名前なしモジュールおよびオープン・モジュール内のすべてのパッケージは、すべてのモジュールに対してオープンされるため、Dが名前なしモジュールまたはオープン・モジュールにある場合、このメソッドは常に成功します。
このメソッドは、宣言クラスがコール元とは異なるモジュールにあり、宣言クラスを含むパッケージがコール元のモジュールに対して開かれていない場合に、プライベート・メンバー、デフォルト(パッケージ)アクセスを持つメンバー、保護されたインスタンス・メンバーまたは保護されたコンストラクタへのアクセスを有効にするために使用できません。
セキュリティ・マネージャが存在する場合は、最初にその
checkPermissionメソッドがReflectPermission("suppressAccessChecks")権限でコールされます。- パラメータ:
flag-accessibleフラグの新しい値- 例外:
InaccessibleObjectException- アクセスを有効にできない場合SecurityException- リクエストがセキュリティ・マネージャによって拒否された場合- 関連項目:
trySetAccessible(),MethodHandles.privateLookupIn(java.lang.Class<?>, java.lang.invoke.MethodHandles.Lookup)
-
-
trySetAccessible
public final boolean trySetAccessible()
可能な場合は、この反映オブジェクトのaccessibleフラグをtrueに設定します。 このメソッドは、accessibleフラグをsetAccessible(true)を呼び出すかのように設定し、accessibleフラグの更新可能な値を返します。 アクセスを有効にできない場合、つまり、チェックまたはJava言語アクセス制御を抑制できない場合、このメソッドはfalseを返します(失敗するとInaccessibleObjectExceptionをスローするsetAccessible(true)とは異なります)。このリフレクト・オブジェクトの
accessibleフラグがtrueの場合、このメソッドはno-opです。たとえば、コール元は、プライベート・インスタンス・メソッド
p.T::privateMethodのMethodオブジェクトに対してtrySetAccessibleを起動して、Methodの起動時にJava言語アクセス制御のチェックを抑制できます。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。- 例外:
SecurityException- リクエストがセキュリティ・マネージャによって拒否された場合- 導入されたバージョン:
- 9
- 関連項目:
MethodHandles.privateLookupIn(java.lang.Class<?>, java.lang.invoke.MethodHandles.Lookup)
-
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。 - 例外:
IllegalArgumentException-- このリフレクト・オブジェクトが静的メンバーまたはコンストラクタで、指定された
objがnull以外の場合、または - このリフレクト・オブジェクトがインスタンス・メソッドまたはフィールドであり、指定された
objがnullであるか、メンバーのdeclaring classのサブクラスではない型の場合。
- このリフレクト・オブジェクトが静的メンバーまたはコンストラクタで、指定された
- 導入されたバージョン:
- 9
- 関連項目:
trySetAccessible(),setAccessible(boolean)- The Java™Language Specificationを参照してください。
- 6.6 アクセス制御
-
getAnnotation
public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
インタフェースからコピーされた説明:AnnotatedElement存在する場合は、この要素の指定された型の注釈を返し、そうでない場合はnullを返します。- 定義:
getAnnotation、インタフェースAnnotatedElement- 型パラメータ:
T- 照会し、存在する場合に返す注釈の型。- パラメータ:
annotationClass- 注釈型に対応するClassオブジェクト- 戻り値:
- 存在する場合は、この要素の指定された注釈型の注釈。そうでない場合はnull
- 例外:
NullPointerException- 指定された注釈クラスがnullの場合- 導入されたバージョン:
- 1.5
-
isAnnotationPresent
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
指定された型の注釈がこの要素に存在する場合はtrueを返し、そうでない場合はfalseを返します。 このメソッドは、主にマーカー注釈への簡易アクセスを目的に設計されています。このメソッドによって返されるtrue値は、
getAnnotation(annotationClass) != nullと同等です。デフォルト・メソッドの本体は、前述のコードとして指定されています。
- 定義:
isAnnotationPresent、インタフェースAnnotatedElement- パラメータ:
annotationClass- 注釈型に対応するClassオブジェクト- 戻り値:
- 指定された注釈型の注釈がこの要素に存在する場合はtrue、そうでない場合はfalse
- 例外:
NullPointerException- 指定された注釈クラスがnullの場合- 導入されたバージョン:
- 1.5
-
getAnnotationsByType
public <T extends Annotation> T[] getAnnotationsByType(Class<T> annotationClass)
インタフェースからコピーされた説明:AnnotatedElementこの要素に関連付けられている注釈を返します。 この要素に関連付けられている注釈がない場合、戻り値は長さ0の配列です。 このメソッドとAnnotatedElement.getAnnotation(Class)の違いは、このメソッドではその引数が繰返し可能な注釈型 (JLS 9.6)であるかどうかが検出され、繰返し可能な注釈型である場合は、コンテナ注釈を調べることで、その型の1つ以上の注釈の検索が試みられることです。 このメソッドの呼出し元は、返された配列を自由に変更することができ、これはほかの呼出し元に返された配列に影響を及ぼしません。- 定義:
getAnnotationsByType、インタフェースAnnotatedElement- 型パラメータ:
T- 照会し、存在する場合に返す注釈の型。- パラメータ:
annotationClass- 注釈型に対応するClassオブジェクト- 戻り値:
- この要素に関連付けられている場合は、この要素の指定された注釈型のすべての注釈。そうでない場合は長さ0の配列
- 例外:
NullPointerException- 指定された注釈クラスがnullの場合- 導入されたバージョン:
- 1.8
-
getAnnotations
public Annotation[] getAnnotations()
インタフェースからコピーされた説明:AnnotatedElementこの要素に存在する注釈を返します。 この要素に存在する注釈がない場合、戻り値は長さ0の配列です。 このメソッドの呼出し元は、返された配列を自由に変更することができ、これはほかの呼出し元に返された配列に影響を及ぼしません。- 定義:
getAnnotations、インタフェースAnnotatedElement- 戻り値:
- この要素に存在する注釈
- 導入されたバージョン:
- 1.5
-
getDeclaredAnnotation
public <T extends Annotation> T getDeclaredAnnotation(Class<T> annotationClass)
インタフェースからコピーされた説明:AnnotatedElement直接存在する場合は、この要素の指定された型の注釈を返し、そうでない場合はnullを返します。 このメソッドは継承された注釈を無視します。 (この要素に直接存在する注釈がない場合は、nullを返します。)- 定義:
getDeclaredAnnotation、インタフェースAnnotatedElement- 型パラメータ:
T- 照会し、直接存在する場合に返す注釈の型。- パラメータ:
annotationClass- 注釈型に対応するClassオブジェクト- 戻り値:
- 直接存在する場合は、この要素の指定された注釈型の注釈。そうでない場合はnull
- 例外:
NullPointerException- 指定された注釈クラスがnullの場合- 導入されたバージョン:
- 1.8
-
getDeclaredAnnotationsByType
public <T extends Annotation> T[] getDeclaredAnnotationsByType(Class<T> annotationClass)
インタフェースからコピーされた説明:AnnotatedElement直接存在するか間接的に存在する場合は、この要素の指定された型の注釈を返します。 このメソッドは継承された注釈を無視します。 この要素に直接または間接的に存在する指定された注釈がない場合、戻り値は長さ0の配列です。 このメソッドとAnnotatedElement.getDeclaredAnnotation(Class)の違いは、このメソッドではその引数が繰返し可能な注釈型 (JLS 9.6)であるかどうかが検出され、繰返し可能な注釈型である場合は、コンテナ注釈(存在する場合)を調べることで、その型の1つ以上の注釈の検索が試みられることです。 このメソッドの呼出し元は、返された配列を自由に変更することができ、これはほかの呼出し元に返された配列に影響を及ぼしません。- 定義:
getDeclaredAnnotationsByType、インタフェースAnnotatedElement- 型パラメータ:
T- 照会し、直接または間接的に存在する場合に返す注釈の型。- パラメータ:
annotationClass- 注釈型に対応するClassオブジェクト- 戻り値:
- この要素に直接または間接的に存在する場合は、この要素の指定された注釈型のすべての注釈。そうでない場合は長さ0の配列
- 例外:
NullPointerException- 指定された注釈クラスがnullの場合- 導入されたバージョン:
- 1.8
-
getDeclaredAnnotations
public Annotation[] getDeclaredAnnotations()
インタフェースからコピーされた説明:AnnotatedElementこの要素に直接存在する注釈を返します。 このメソッドは継承された注釈を無視します。 この要素に直接存在する注釈がない場合、戻り値は長さ0の配列です。 このメソッドの呼出し元は、返された配列を自由に変更することができ、これはほかの呼出し元に返された配列に影響を及ぼしません。- 定義:
getDeclaredAnnotations、インタフェースAnnotatedElement- 戻り値:
- この要素に直接存在する注釈
- 導入されたバージョン:
- 1.5
-
-