- すべての実装されたインタフェース:
AnnotatedElement
- 直系の既知のサブクラス:
Executable
,Field
AccessibleObject
クラスは、Field
、Method
、およびConstructor
オブジェクト(「反映されたオブジェクト」と呼ばれる)の基本クラスです。 Java言語アクセス制御の使用時に、反映されたオブジェクトにJava言語アクセス制御の抑制チェックとしてフラグを付けることができます。 これにより、Javaオブジェクト直列化やその他の永続性メカニズムなど、十分な権限を持つ高度なアプリケーションが、通常禁止される方法でオブジェクトを操作できます。
Java言語アクセス制御では、トップレベル・クラス外部のプライベート・メンバー、パッケージ・アクセス外部のメンバー、パッケージまたはサブクラス外の保護されたメンバー、およびそれらがexported
パッケージとユーザーreads
モジュールで宣言されていないかぎり、そのモジュール外のパブリック・メンバーを使用できません。 デフォルトでは、Field
s、Method
sまたはConstructor
sを使用してフィールドを取得または設定したり、メソッドを起動したり、クラスの新しいインスタンスを作成および初期化したりする場合、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言語のアクセス制御のチェックが抑制されているかどうかを実際に示しているときに、反映されたオブジェクトにアクセス可能かどうかを調べるというヒントを持つため、非推奨です。boolean
isAnnotationPresent
(Class<? extends Annotation> annotationClass) 指定された型の注釈がこの要素に存在する場合はtrueを返し、そうでない場合はfalseを返します。void
setAccessible
(boolean flag) この反映オブジェクトのaccessible
フラグを指定されたブール値に設定します。static void
setAccessible
(AccessibleObject[] array, boolean flag) 単一のセキュリティ・チェック(効率化のため)で反射オブジェクトの配列のaccessible
フラグを設定する便利なメソッド。final boolean
可能な場合は、この反映されたオブジェクトのaccessible
フラグをtrue
に設定します。
-
コンストラクタの詳細
-
AccessibleObject
-
-
メソッドの詳細
-
setAccessible
public static void setAccessible(AccessibleObject[] array, boolean flag) 単一のセキュリティ・チェック(効率化のため)で反射オブジェクトの配列のaccessible
フラグを設定する便利なメソッド。このメソッドは、各反射オブジェクトへのアクセスを
setAccessible(boolean)
で指定されたとおりに有効にできるときに、配列内のすべての反射オブジェクトにアクセスできるようにするために使用できます。セキュリティ・マネージャが存在する場合、その
checkPermission
メソッドが最初にReflectPermission("suppressAccessChecks")
権限でコールされます。SecurityException
は、入力array
のいずれかの要素がクラスjava.lang.Class
のConstructor
オブジェクトであり、flag
がtrueの場合にもスローされます。- パラメータ:
array
- AccessibleObjectの配列flag
- 各オブジェクトのaccessible
フラグの新しい値- 例外:
InaccessibleObjectException
- アレイ内のすべてのオブジェクトに対してアクセスを有効にできない場合SecurityException
- リクエストがセキュリティ・マネージャによって拒否された場合、または配列内の要素がjava.lang.Class
のコンストラクタである場合- 関連項目:
-
setAccessible
public void setAccessible(boolean flag) この反映オブジェクトのaccessible
フラグを指定されたブール値に設定します。 値true
は、Java言語アクセス制御の使用時に、反映されたオブジェクトがチェックを抑制する必要があることを示します。 値false
は、反映されたオブジェクトが使用されるときにJava言語アクセス制御のチェックを強制することを示し、クラスの説明に示されているバリエーションを示します。このメソッドは、
C
クラスの呼び出し側がdeclaring class
D
のmember
へのアクセスを可能にするために使用されます:-
C
とD
は同じモジュール内にあります。 - メンバーは
public
であり、D
はパッケージ内のpublic
であり、D
exports
を含むモジュールは少なくともC
を含むモジュールに含まれます。 - メンバーは
protected
static
、D
はパッケージ内のpublic
であり、D
を含むモジュールは少なくともC
を含むモジュールにエクスポートし、C
はD
のサブクラスです。 -
D
は、少なくともC
を含むモジュールにD
opens
を含むモジュールがパッケージされています。 名前なしモジュールおよびオープン・モジュール内のすべてのパッケージは、すべてのモジュールに対して開かれているため、D
が名前なしモジュールまたはオープン・モジュールにある場合、このメソッドは常に成功します。
このメソッドは、次の場合にのみ
declaring class
D
のmember
へのアクセスを有効にするために、スタック上にコール元クラスがない「JNIコード」で使用できます:- メンバーは
public
で、D
はD
exports
が無条件に含まれるパッケージ内のpublic
です。
宣言クラスが呼出し側と異なるモジュールにあり、宣言クラスを含むパッケージが呼出し側のモジュールに対して開かれていない場合、このメソッドは、プライベート・メンバー、デフォルトの(package)アクセス権を持つメンバー、保護されたインスタンス・メンバーまたは保護されたコンストラクタへのアクセスを有効にするために使用できません。
このメソッドを使用して、non-modifiable最終フィールドへのwriteアクセスを有効にすることはできません。 次のフィールドは変更できません:
true
がJava言語アクセス制御チェックを抑制して、これらの変更不可能な最終フィールドへのreadアクセスのみを有効にする場合のaccessible
フラグ。セキュリティ・マネージャが存在する場合、その
checkPermission
メソッドが最初にReflectPermission("suppressAccessChecks")
権限でコールされます。- パラメータ:
flag
-accessible
フラグの新しい値- 例外:
InaccessibleObjectException
- アクセスを有効にできない場合SecurityException
- リクエストがセキュリティ・マネージャによって拒否された場合- 外部仕様
- 関連項目:
-
-
trySetAccessible
public final boolean trySetAccessible()可能な場合は、この反映されたオブジェクトのaccessible
フラグをtrue
に設定します。 このメソッドは、setAccessible(true)
を呼び出すかのようにaccessible
フラグを設定し、accessible
フラグに対して更新される可能性がある値を返します。 アクセスを有効にできない場合、つまり、チェックまたはJava言語のアクセス制御を抑制できない場合、このメソッドはfalse
(setAccessible(true)
が失敗したときにInaccessibleObjectException
をスローするのではなく)を返します。この反射オブジェクトの
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 ... }
このメソッドが「JNIコード」によって起動され、コール元クラスがスタック上にない場合、
accessible
フラグを設定できるのは、メンバーおよび宣言元クラスがパブリックで、クラスが無条件にエクスポートされるパッケージ内にある場合のみです。セキュリティ・マネージャが存在する場合、その
checkPermission
メソッドが最初にReflectPermission("suppressAccessChecks")
権限でコールされます。- 戻り値:
accessible
フラグがtrue
に設定されている場合はtrue
、アクセスを有効にできない場合はfalse
。- 例外:
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
を返します(クラスの説明にはバリエーションが記載されています)。 このメソッドが「JNIコード」によって起動され、コール元クラスがスタック上にない場合、メンバーおよび宣言クラスがpublicで、クラスが無条件にエクスポートされるパッケージ内にある場合、このメソッドはtrue
を返します。- パラメータ:
obj
- インスタンス・メソッドまたはフィールドの場合、この反映されたオブジェクトの宣言クラスのインスタンス・オブジェクト- 戻り値:
- 呼出し側がこの反映されたオブジェクトにアクセスできる場合は
true
。 - 例外:
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
- 例外:
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) この要素に関連付けられている注釈を返します。 この要素に関連付けられている注釈がない場合、戻り値は長さ0の配列です。 このメソッドとAnnotatedElement.getAnnotation(Class)
の違いは、引数が「繰返し可能な注釈タイプ」 (JLS 9.6)であるかどうかをこのメソッドが検出し、その場合、"検索"がコンテナ注釈を使用してそのタイプの注釈を検索しようとすることです。 このメソッドの呼出し元は、返された配列を自由に変更することができ、これはほかの呼出し元に返された配列に影響を及ぼしません。このメソッドによって返される注釈は宣言注釈であることに注意してください。
- 定義:
getAnnotationsByType
、インタフェースAnnotatedElement
- 実装要件:
- デフォルトの実装では
UnsupportedOperationException
がスローされます。サブクラスはこのメソッドをオーバーライドする必要があります。 - 型パラメータ:
T
- 照会し、存在する場合に返す注釈の型。- パラメータ:
annotationClass
- 注釈型に対応するClassオブジェクト- 戻り値:
- この要素に関連付けられている場合は、この要素の指定された注釈型のすべての注釈。そうでない場合は長さ0の配列
- 例外:
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
- 例外:
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の配列
- 例外:
NullPointerException
- 指定された注釈クラスがnullの場合- 導入されたバージョン:
- 1.8
-
getDeclaredAnnotations
public Annotation[] getDeclaredAnnotations()この要素に直接存在する注釈を返します。 このメソッドは継承された注釈を無視します。 この要素に直接存在する注釈がない場合、戻り値は長さ0の配列です。 このメソッドの呼出し元は、返された配列を自由に変更することができ、これはほかの呼出し元に返された配列に影響を及ぼしません。このメソッドによって返される注釈は宣言注釈であることに注意してください。
- 定義:
getDeclaredAnnotations
、インタフェースAnnotatedElement
- 実装要件:
- デフォルトの実装では
UnsupportedOperationException
がスローされます。サブクラスはこのメソッドをオーバーライドする必要があります。 - 戻り値:
- この要素に直接存在する注釈
- 導入されたバージョン:
- 1.5
-