広告

Java : IllegalAccessException - API使用例

IllegalAccessException (Java SE 19 & JDK 19) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

アプリケーションが、配列以外のインスタンス作成、フィールドの設定または取得、メソッドの呼出しを試みた場合に、IllegalAccessExceptionがスローされます。ただし、現在のところ、メソッドの実行により指定されたクラス、フィールド、メソッド、またはコンストラクタの定義へのアクセスは行われません。

クラス構成

IllegalAccessException は、リフレクション操作でアクセスに失敗したときに発生するチェック例外です。
例えば、private な Field から setAccessible(true) せずに値を取得しようとすると発生します。

public class Foo {
    private int num = 100;
}
final var cls = Foo.class;
final var obj = new Foo();

final var field = cls.getDeclaredField("num");
System.out.println("field : " + field);

System.out.println("-----");
try {
    System.out.println("canAccess = " + field.canAccess(obj));
    System.out.println("get = " + field.getInt(obj));
} catch (IllegalAccessException e) {
    System.out.println("IllegalAccessException!");
}

System.out.println("-----");
try {
    field.setAccessible(true);
    System.out.println("canAccess = " + field.canAccess(obj));
    System.out.println("get = " + field.getInt(obj));
} catch (IllegalAccessException e) {
    System.out.println("IllegalAccessException!");
}

// 結果
// ↓
//field : private int Foo.num
//-----
//canAccess = false
//IllegalAccessException!
//-----
//canAccess = true
//get = 100

コンストラクタ

IllegalAccessException ()

詳細メッセージを持たないIllegalAccessExceptionを構築します。

final var e = new IllegalAccessException();
System.out.println(e); // java.lang.IllegalAccessException

IllegalAccessException (String s)

詳細メッセージを持つIllegalAccessExceptionを構築します。

final var e = new IllegalAccessException("abcd");
System.out.println(e); // java.lang.IllegalAccessException: abcd
System.out.println(e.getMessage()); // abcd

Throwableで宣言されたメソッド

addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString

Java API 使用例 : Throwable」をご参照ください。


関連記事

ページの先頭へ