Java Reflection 예제
12 Feb 2019 | AndroidJava 언어에서 제공하는 Reflection 기능을 이용해서 각 클래스의 생성자 정보 등을 출력하는 예제입니다.
Main.java
package snowdeer.reflection;
public class Main {
  public static void main(String[] args) {
    ReflectionTest test = new ReflectionTest();
    test.start();
  }
}
ReflectionTest.java
package snowdeer.reflection;
import java.lang.reflect.Constructor;
import java.lang.reflect.Parameter;
public class ReflectionTest {
  public void start() {
    Class c = SampleClass.class;
    Log("1) Class Info");
    Log("   - " + c.toString());
    Log("2) Class Constructors & Parameters");
    Constructor[] cons = c.getDeclaredConstructors();
    for (int i = 0; i < cons.length; i++) {
      Log("   - " + cons[i].toString());
      Parameter[] params = cons[i].getParameters();
      for (int j = 0; j < params.length; j++) {
        Log("      > " + params[j].getType());
      }
    }
  }
  void Log(String text) {
    System.out.println(text);
  }
}
SampleClass.java
package snowdeer.reflection;
public class SampleClass {
  int id;
  String name;
  long startPos;
  float speed;
  public SampleClass(int id, String name, long startPos, float speed) {
    init(id, name, startPos, speed);
  }
  public SampleClass(int id, String name, long startPos) {
    init(id, name, startPos, 0);
  }
  public SampleClass(int id, String name) {
    init(id, name, 100, 0);
  }
  public SampleClass(int id) {
    init(id, "SampleClass", 100, 0);
  }
  public SampleClass() {
    init(1, "SampleClass", 100, 0);
  }
  void init(int id, String name, long startPos, float speed) {
    this.id = id;
    this.name = name;
    this.startPos = startPos;
    this.speed = speed;
  }
}
결과 화면
1) Class Info
   - class snowdeer.reflection.SampleClass
2) Class Constructors & Parameters
   - public snowdeer.reflection.SampleClass()
   - public snowdeer.reflection.SampleClass(int)
      > int
   - public snowdeer.reflection.SampleClass(int,java.lang.String)
      > int
      > class java.lang.String
   - public snowdeer.reflection.SampleClass(int,java.lang.String,long)
      > int
      > class java.lang.String
      > long
   - public snowdeer.reflection.SampleClass(int,java.lang.String,long,float)
      > int
      > class java.lang.String
      > long
      > float
  