Java リフレクション メカニズムはどのようにしてクラス メソッドとメンバー変数を取得しますか?

WBOY
リリース: 2024-05-03 21:21:01
オリジナル
781 人が閲覧しました

Java リフレクション メカニズムにより、メソッドやメンバー変数を含むクラス情報の動的なアクセスと操作が可能になります。メソッドを取得するには、getMethods()、getReturnType()、および getParameterTypes() メソッドを使用できます。メンバー変数を取得するには、getFields() メソッドと get() メソッドを使用できます。 注釈を取得するには、getAnnotations() メソッドを使用できます。パラメータと戻り値の型を取得するには、getParameterTypes() メソッドと getReturnType() メソッドを使用できます。実際には、Person クラスのメンバー変数とメソッドは、リフレクション機構を通じて動的に取得できます。

Java リフレクション メカニズムはどのようにしてクラス メソッドとメンバー変数を取得しますか?

Java リフレクション メカニズム: クラス メソッドとメンバー変数の取得

リフレクション メカニズムは、Java の強力なメカニズムであり、動的にメソッドやメンバー変数などのクラス情報にアクセスして操作します。

クラスのメソッドを取得する

クラスのすべてのメソッドを取得するには、getMethods()メソッド:

を使用できます。
Class<?> clazz = MyClass.class;
Method[] methods = clazz.getMethods();
ログイン後にコピー

If 特定のタイプのメソッドのみを取得したい場合は、オーバーロードされた getMethods() メソッドを使用できます。たとえば、次のようになります。

Method[] getDeclaredMethods = clazz.getDeclaredMethods();
Method[] getPublicMethods = clazz.getMethods();
ログイン後にコピー

メソッド パラメーターを取得するクラスの戻り値の型

メソッドのパラメーターと戻り値の型を取得するには、getParameterTypes()getReturnType() を使用できます。メソッド:

Method method = clazz.getMethod("myMethod");
Class<?>[] parameterTypes = method.getParameterTypes();
Class<?> returnType = method.getReturnType();
ログイン後にコピー

クラスのメソッド アノテーションを取得します。

メソッド アノテーションを取得するには、getAnnotations()getAnnotation を使用できます。 ()methods:

Annotation[] annotations = method.getAnnotations();
Annotation annotation = method.getAnnotation(MyAnnotation.class);
ログイン後にコピー

クラス変数のメンバーの取得

クラスのすべてのメンバー変数を取得するには、getFields( ) メソッド:

Field[] fields = clazz.getFields();
ログイン後にコピー

特定の型または可視性のメンバー変数のみを取得したい場合は、オーバーロードされた getFields() メソッドを使用できます。例:

Field[] getDeclaredFields = clazz.getDeclaredFields();
Field[] getPublicFields = clazz.getFields();
ログイン後にコピー

クラスのメンバー変数値を取得します

メンバー変数の値を取得しますget()メソッドを使用します:

Field field = clazz.getField("myField");
Object value = field.get(myObject);
ログイン後にコピー

実際的なケース

次の例を考えてみましょう。クラス Person メソッドとメンバー変数を動的に取得したいと考えています。 # メソッドとメンバー変数:

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class Main {

    public static void main(String[] args) {
        Class<?> clazz = Person.class;

        // 获取类的方法
        for (Method method : clazz.getMethods()) {
            System.out.println("Method: " + method.getName());
            System.out.println("Modifiers: " + Modifier.toString(method.getModifiers()));

            // 获取方法参数和返回值类型
            System.out.println("Parameters:");
            for (Class<?> parameterType : method.getParameterTypes()) {
                System.out.println("  - " + parameterType.getName());
            }
            System.out.println("Return type: " + method.getReturnType().getName());

            // 获取方法注解
            for (Annotation annotation : method.getAnnotations()) {
                System.out.println("Annotation: " + annotation.annotationType().getName());
            }
            System.out.println();
        }

        // 获取类的成员变量
        for (Field field : clazz.getDeclaredFields()) {
            System.out.println("Field: " + field.getName());
            System.out.println("Modifiers: " + Modifier.toString(field.getModifiers()));
            System.out.println("Type: " + field.getType().getName());
            System.out.println();
        }
    }
}

class Person {

    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
}
ログイン後にコピー

このコードは動的に取得します。クラス Person のすべてのメソッドとメンバー変数を出力します。

以上がJava リフレクション メカニズムはどのようにしてクラス メソッドとメンバー変数を取得しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート