본문 바로가기

Java

[Reflect] 예제.

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @author need4spd, need4spd@cplanet.co.kr, 2010. 2. 11.
*
*/
public class ReflectTest {
private Log logger = LogFactory.getLog(ReflectTest.class);
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
//Class class의 객체를 얻는 3가지 방법
Class clazz = Class.forName("ReflectClass");
Class clazz2 = ReflectClass.class;
Class clazz3 = new ReflectClass().getClass();
//Class class 객체로 부터 해당 클래스의 인스턴스를 얻는 세가지 방법
Object object = clazz.newInstance();
Class[] constructorParamClass = new Class[] {String.class};
Object[] constructorParamObject = new Object[] {"Reflect Test!!!"};
Constructor constructor = clazz.getConstructor(constructorParamClass);
Object object2 = constructor.newInstance(constructorParamObject);
//필드를 가져오는 방법
Field field = clazz.getField("myField");
Object fieldObject = field.get(object2);
//특정 메서드 가져와서 실행
Method method1 = clazz.getMethod("methodA");
method1.invoke(object);
//파라메터가 있는 특정 메서드 실행
Class[] methodParamClass = new Class[] {String.class};
Object[] methodParamObject = new Object[] {"1 parameter"};
Method method2 = clazz.getMethod("methodB", methodParamClass);
//method2.invoke(null, methodParamObject); //static 일때.
method2.invoke(object, methodParamObject);
//리턴값이 있는 메서드 실행
Method method3 = clazz.getMethod("methodC");
Object returnObject = method3.invoke(object);
System.out.println("methodC return value : " + returnObject);
System.out.println(fieldObject);
//static
Method method4 = clazz.getMethod("methodD", new Class[] {String.class});
method4.invoke(null, new Object[] {"4 parameter"});
// Method[] methods = clazz.getDeclaredMethods();
// Method m = methods[2];
// m.invoke(object, new Object[] {String.class});
}
}
view raw 1.java hosted with ❤ by GitHub