Java プログラミングでは、リフレクションは、クラス、インターフェイス、メソッド、フィールドのメカニズムなどを検査、取得、操作できるメソッドです。情報。リフレクションを使用すると、実行時に動的にメソッドの呼び出し、インスタンスの作成、クラス情報の取得などが可能になり、プログラム設計の柔軟性と拡張性が向上します。この記事では、読者がリフレクションのアプリケーションを深く理解できるように、特定のコード例を使用して Java リフレクションでの一般的な呼び出しメソッドを示します。
リフレクションを使用する前に、まず対応するクラスの Class オブジェクトを取得する必要があります。 Class.forName()
メソッドを使用して、クラスの完全修飾名に基づいて Class オブジェクトを取得できます。また、オブジェクトの getClass()
メソッドを使用して Class オブジェクトを取得することもできます。 、またはクラス名を直接使用して取得することもできます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:java;toolbar:false;'>// 通过Class.forName()获取Class对象
Class<?> clazz1 = Class.forName("com.example.MyClass");
// 通过对象的getClass()方法获取Class对象
MyClass obj = new MyClass();
Class<?> clazz2 = obj.getClass();
// 直接使用类名.class获取Class对象
Class<?> clazz3 = MyClass.class;</pre><div class="contentsignin">ログイン後にコピー</div></div>
オブジェクトのインスタンス化
メソッドを使用してインスタンスを作成できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:java;toolbar:false;'>Class<?> clazz = Class.forName("com.example.MyClass");
MyClass obj = (MyClass) clazz.newInstance();</pre><div class="contentsignin">ログイン後にコピー</div></div>
メソッドの呼び出し
があり、その中にメソッド public void doSomething(String param)
が含まれているとします。このメソッドは、リフレクションを通じて呼び出すことができます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:java;toolbar:false;'>// 获取Method对象
Class<?> clazz = Class.forName("com.example.MyClass");
Method method = clazz.getMethod("doSomething", String.class);
// 创建对象
MyClass obj = (MyClass) clazz.newInstance();
// 调用方法
method.invoke(obj, "Hello, Reflection!");</pre><div class="contentsignin">ログイン後にコピー</div></div>
フィールド値の取得と設定
があり、それにフィールド private String name
が含まれているとします。リフレクションを通じてこのフィールドの値を取得および設定できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:java;toolbar:false;'>// 获取Field对象
Class<?> clazz = Class.forName("com.example.MyClass");
Field field = clazz.getDeclaredField("name");
// 创建对象
MyClass obj = (MyClass) clazz.newInstance();
// 设置字段的值
field.setAccessible(true);
field.set(obj, "Reflection");
// 获取字段的值
String name = (String) field.get(obj);</pre><div class="contentsignin">ログイン後にコピー</div></div>
ジェネリック型の適用
を返す場合、リフレクションを通じて戻り値の実際の型を取得する必要があります。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:java;toolbar:false;'>Method method = SomeClass.class.getMethod("getList");
Type returnType = method.getGenericReturnType();
if (returnType instanceof ParameterizedType) {
ParameterizedType type = (ParameterizedType) returnType;
Type[] typeArguments = type.getActualTypeArguments();
for (Type typeArgument : typeArguments) {
Class<?> typeArgClass = (Class<?>) typeArgument;
System.out.println("List的实际类型是:" + typeArgClass.getName());
}
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
概要
上記の例を通じて、読者はリフレクションの応用についてより深く理解することができると同時に、特定の状況に応じてより多くの実践と探求を行うこともできます。 Java プログラミングの重要な機能であるリフレクションは、プログラム設計に優れた柔軟性と拡張性をもたらし、実際のプロジェクトに広範な応用価値をもたらします。
以上がJavaリフレクションでのメソッド呼び出しの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。