反射
クラス自体はクラスです
クラスオブジェクトはシステムによってのみ作成できます
リフレクションがどのように達成されるか
道 | デモ |
---|---|
オブジェクトで取得 | ユーザーuser = new User(); クラスc1 = user.getClass() |
ClassクラスのforName()静的メソッドを介して | クラスc2 = Class.forName(“ com.radish.domain.User”); |
クラス名別クラス | クラスc3 = User.class |
コードデモ:
public stati void main(String[] args) {
// 方式一:使用对象
User user = new User();
Class c1 = user.getClass();
// 方式二:使用Class的静态方法forName()
Class c2 = Class.forName("com.radish.User");
// 方式三:使用类的.class
Class c3 = User.class;
}
リフレクションで一般的に使用される方法
- インスタンスオブジェクトを作成する
- フィールド、フィールド属性を取得します
- メソッド、メソッド属性を取得します
- コンストラクターなど
メソッド名 | 特徴 |
---|---|
newInstance | パラメータのないコンストラクタを使用するのと同じです新しいオブジェクト |
getConstructor | オブジェクトのコンストラクターオブジェクトを取得します |
getMethods / getDeclaredMethods | メソッドオブジェクト配列を取得します。Declaredのないメソッドは、このクラスと親クラスのメソッドを取得できますが、publicを使用する必要があります。Declaredのメソッドは、(private、protect、public)を含む、このクラスのすべてのメソッドのみを取得できます。 |
getMethod / getDeclaredMethod | メソッド名を指定して指定されたメソッドを取得します。Declaredは上記と同じ効果があります |
getFields / getDeclaredFields | クラスのフィールドを取得し、Filed配列を返します。Declaredの機能は上記と同じです。 |