java反射呼び出しクラスの方法

2545 ワード

最近問題が発生しました。これらの方法は基本的にオブジェクトを呼び出す方法以外は同じです。この同じ点を発見した後、方法をどう書くかを考えています。オブジェクトに入る方法の名前だけで方法を調整することができます。
ここではjava反射を使います。
まず反射で呼び出すクラスのコンピュータを作成します。
package com;

public class Computer {
	
	
	public Computer(){
		super();
	}
	
	public void surfInternet(){
		System.out.println("    ");
	}
	
	public void watchTV(){
		System.out.println("     ");
	}
	
	public void workOffice(){
		System.out.println("    ");
	}
	
	public int getLength(String str){
		System.out.print("     : ");
		return str.length();
	}
	
	public static String getName(String name){
		return name;
	}
	
}
 次に反射呼び出しの主関数を書きます。
package com;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class TestReflect1 {
	
	public static Object invokeMethod(Method method,Object obj,Object...args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{
		return method.invoke(obj, args);
	}
	
	public static void main(String[] args) {
		try {
			
			
			int len = (Integer)invokeMethod(Computer.class.getMethod("getLength", String.class),Computer.class.newInstance(),"HP");
			System.out.println(len);
			
			String str = (String)invokeMethod(Computer.class.getMethod("getName", String.class),null,"HP");
			System.out.println(str);
			
			String [] strs = new String[]{
				"watchTV","surfInternet","workOffice"
			};
			for(int i=0;i
 下のコードを比較します。
int len = (Integer)invokeMethod(Computer.class.getMethod("getLength", String.class),Computer.class.newInstance(),"HP");
			System.out.println(len);
			
			String str = (String)invokeMethod(Computer.class.getMethod("getName", String.class),null,"HP");
			System.out.println(str);
 オブジェクトに着信していないことがわかったのは、成員法として、一つは静的方法であり、静的方法はクラスローディング時に作成されたと言っても良いし、メンバ方法はオブジェクト作成時に作成されなければならないので、成員法はオブジェクトに参加しなければならないからです。
以下の呼び出しを見てください。
			String [] strs = new String[]{
				"watchTV","surfInternet","workOffice"
			};
			for(int i=0;i
 Computerには3つの類似の方法が含まれています。また、パラメータは基本的に同じです。だから、オブジェクトを直接に呼び出すのではなく、1つの配列でこのオブジェクトを呼び出します。
 
このようにすれば、類似処理を行う際にオブジェクトに入る方法で呼び出すことができる。
 
しかし、反射を使うと運転効率が低下しますが、コードの再利用性はかなり高くなります。