어떻게 반 사 를 통 해 같은 종류의 방법 을 사용 합 니까?

자바 원생 태 의 반사
FanSheTime 이 저 를 위해 서 쓰 는 아 이 템 을 설명해 주세요.
용법 1:실례 화 대상,대상 을 통 해 안에 있 는 방법 을 직접 사용 하면 된다.
public static void main(String[] args) {
		try {
			long begin = System.currentTimeMillis();
			
			Class> forName = Class.forName("lcl.FanSheTime");
			FanSheTime ss = (FanSheTime) forName.newInstance();
			
			ss.function1("hello world");
			
			long end = System.currentTimeMillis();
			
			System.out.println("  >>>>>>>>>>>>>>>>>>>>"+(end - begin));
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}catch (NoSuchMethodException e) {
			e.printStackTrace();
		}catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
	}
	public void function1(String str){
		System.out.println(str);
	}
	public void function1(){
		System.out.println("hello world");
	}

방법 2:매개 변수 가 없 는 방법 을 반사 적 으로 사용 합 니 다(실례 화 대상 이 아 닙 니 다)
public static void main(String[] args) {
		try {
			long begin = System.currentTimeMillis();
			
			Class> forName = Class.forName("lcl.FanSheTime");

			Method method = forName.getMethod("function1");
			method.invoke(forName.newInstance());
			
			long end = System.currentTimeMillis();
			
			System.out.println("  >>>>>>>>>>>>>>>>>>>>"+(end - begin));
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}catch (NoSuchMethodException e) {
			e.printStackTrace();
		}catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
	}
	public void function1(String str){
		System.out.println(str);
	}
	public void function1(){
		System.out.println("hello world");
	}

방법 3:파 라 메 터 를 반사 적 으로 사용 하 는 방법:
public static void main(String[] args) {
		try {
			long begin = System.currentTimeMillis();
			
			Class> forName = Class.forName("lcl.FanSheTime");

			Method method = forName.getMethod("function1",String.class);
			method.invoke(forName.newInstance(),"   ");
			
			long end = System.currentTimeMillis();
			
			System.out.println("  >>>>>>>>>>>>>>>>>>>>"+(end - begin));
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}catch (NoSuchMethodException e) {
			e.printStackTrace();
		}catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
	}
	public void function1(String str){
		System.out.println(str);
	}
	public void function1(){
		System.out.println("hello world");
	}

만약 여러 개의 매개 변수 가 getMethod 방법 에서 서로 다른 매개 변수 유형 을 입력 하면 invoke 방법 에서 매개 변 수 를 입력 하면 됩 니 다.
Method method = forName.getMethod("function1",String.class,,String.class,int.class);method.invoke(forName.newInstance(),"초검 봉","hello world",1);
방법 4:bsh-core-2.0b4.jar 를 통 해 jar 패키지 반사 완료
이러한 방법의 장점 은 응답 대상 과 방법 명 만 입력 하면 eval 방법 을 통 해 사용 하고 자 하 는 방법 을 실행 할 수 있다 는 것 이다.매우 쉽다.
package lcl;

import bsh.EvalError;
import bsh.Interpreter;

public class InterpreterWrapper extends Interpreter {

	public static void main(String[] args) {
		
		FanSheTime fanSheTime = new FanSheTime();
		InterpreterWrapper ip = new InterpreterWrapper();
		long begin = System.currentTimeMillis();
		try {
			ip.set("fanSheTime", fanSheTime);
			ip.eval("fanSheTime.function1()");
		} catch (EvalError e1) {
			e1.printStackTrace();
		}
		long end = System.currentTimeMillis();
		
		System.out.println("  >>>>>>>>>>>>>>>>>>>>"+(end - begin));
	}
}

좋은 웹페이지 즐겨찾기