0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Java リフレクション

Last updated at Posted at 2024-07-22

Java 11 Gold 取得に向けた学習記録

リフレクション

リフレクションは、クラス、メソッド、フィールドなどの実行時の情報を動的に取得したり操作したりする機能のことを指す。

リフレクションを使用することで、プログラムの実行時にクラスやオブジェクトのメタデータを取得し、メソッドの呼び出し、フィールドへのアクセス、インスタンスの生成などを行うことができる。

また、リフレクションを利用することでアノテーション情報を取得することができる。

実際にリフレクションを利用するにはjava.lang.reflectパッケージを使用する。

Class<T>

java.lang.Class<T>クラスは、クラスが持つメタデータを表す。

リフレクションを利用してClass<T>オブジェクト取得する方法にはいくつかの手段があり、取得したClassオブジェクトは class が予約語であるため、慣例的に変数clazzに格納されることが多い。

Class.forName()

Class.forName()を使用して、Class<T>オブジェクトを取得することができる。forName()は指定したクラスが見つからないと ClassNotFoundExceptionthrow される。

public class MyClass {}
Class.forName()
try {
    Class<MyClass> clazz = (Class<MyClass>) Class.forName("MyClass");
} catch (ClassNotFoundException e) {
}

classキーワード

Javaの言語仕様には、classキーワードを使用してClass<T>オブジェクトを取得する特殊な構文がある。

public class MyClass {}
classキーワード
 Class<MyClass> clazz = MyClass.class;

Object.getClass()

インスタンスからObject.getClass()メソッドを利用して、Class<T>オブジェクトを取得することもできる。

public class MyClass {}
Object.getClass()
MyClass myClass = new MyClass();
Class<? extends MyClass> clazz = myClass.getClass();

ここで使用されている<? extends T>は上限境界ワイルドカードを呼ばれる。

非境界ワイルドカード<?>を使用することもできる。

Object.getClass()
MyClass myClass = new MyClass();
Class<?> clazz = myClass.getClass();

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?