Java 的反射可以做的事情

反射(reflection)在Java中的应用

Java的反射是指在运行时获取和执行类、方法等信息的功能。

使用反思的好处

通过使用反思来获得以下好处。

    • クラスやメソッドの情報を取得したり、実行したりすることができるため、実行時にクラスやメソッドを動的に操作することができます。

 

    • クラスやメソッドの内部構造を直接操作するため、柔軟なコードを作成することができます。

 

    フレームワークやライブラリの内部構造を解析することができます。

使用反射时需要注意的要点

在使用反思时需要注意以下几点。

    • リフレクションは、実行時にクラスやメソッドの情報を得るため、パフォーマンスに影響を与える可能性があります。

 

    リフレクションは、クラスやメソッドの内部構造を直接操作するため、不正な操作を行うと、予期しない結果を招く可能性があります。

使用反思的典型例子

反思可以用于以下用途。

    • フレームワークやライブラリの内部構造を解析する

 

    • ランタイム時にクラスやメソッドを拡張する

 

    プロキシパターンを実現する

试着亲身使用反思

这段代码获取了一个名为com.example.MyClass的类,并显示了该类的信息。

// クラスを取得する
Class<?> clazz = Class.forName("com.example.MyClass");

// クラスの名前を取得する
System.out.println(clazz.getName()); // com.example.MyClass

// クラスのメソッドを取得する
Method[] methods = clazz.getMethods();

// メソッドの名前を取得する
for (Method method : methods) {
  System.out.println(method.getName());
} // sayHello, getAge

// メソッドを実行する
Object instance = clazz.newInstance();
Method sayHelloMethod = clazz.getMethod("sayHello");
sayHelloMethod.invoke(instance); // Hello!

// フィールドを取得する
Field ageField = clazz.getField("age");

// フィールドの値を取得する
Object age = ageField.get(instance);
System.out.println(age); // 20

// フィールドの値を設定
ageField.set(instance, 30);
age = ageField.get(instance);
System.out.println(age); // 30

这段代码执行了以下处理。

Class.forName() メソッドを使用して、com.example.MyClass というクラスを取得します。

clazz.getName() メソッドを使用して、クラスの名前を取得します。

clazz.getMethods() メソッドを使用して、クラスのすべてのメソッドを取得します。

method.getName() メソッドを使用して、メソッドの名前を取得します。

clazz.newInstance() メソッドを使用して、クラスのインスタンスを生成します。

clazz.getMethod() メソッドを使用して、メソッドを取得します。

method.invoke() メソッドを使用して、メソッドを実行します。

clazz.getField() メソッドを使用して、フィールドを取得します。

ageField.get() メソッドを使用して、フィールドの値を取得します。

ageField.set() メソッドを使用して、フィールドの値を設定します。

执行此代码将得到以下输出结果。

com.example.MyClass
sayHello, getAge
Hello!
20
30

还有其他的获取修饰器相关处理,如下所示:

Modifier.isPrivate(field.getModifiers()) そのフィールドがprivateかを取得します。

Modifier.isPrivate(method.getModifiers()) そのメソッドがprivateかを取得します。

掌握使用反思的要点

要熟练掌握使用反思的技巧,建议记住以下要点。

    • リフレクションがどのような機能なのかを理解する。

 

    • リフレクションを利用する際の注意点を理解する。

 

    リフレクションを実際に使ってみる。

反射是Java的高级功能,但如果能够熟练运用,将非常方便。让我们一定要熟练掌握反射,使Java编程更加有趣、更加便利。

广告
将在 10 秒后关闭
bannerAds