
T> 에 접근하는 방법
- 모든 Class를 로딩 한 다음 Class<
T>의 인스턴스가 생긴다. "타입.class"로 접근할 수 있다.- 모든 인스턴스는 getClass() 메소드를 가지고 있다. "인스턴스.getClass()"로 접근할 수 있다.
- Class를 문자열로 읽어오는 방법 :
- Class.forName("FQCN")
- ClassPath에 해당 Class가 없다면 ClassNotFoundException이 발생한다.
T>를 통해 할 수 있는 것
- Field(목록) 가져오기
- Method(목록) 가져오기
- 상위 Class 가져오기
- Interface(목록) 가져오기
- Annotation 가져오기
- 생성자 가져오기
public class Book {
private static String B = "Book";
private static final String C = "Book";
private String a = "a";
public String d = "d";
protected String e = "e";
public Book() {
}
public Book(String a, String d, String e) {
this.a = a;
this.d = d;
this.e = e;
}
private void f() {
System.out.println("F");
}
public void g() {
System.out.println("G");
}
public int h() {
return 1000;
}
}
Arrays.stream(bookClass.getFields()).forEach(System.out::println);

위와 같이 Field는 Public한 Field만 가져온다.
Arrays.stream(bookClass.getDeclaredFields()).forEach(System.out::println);

getDeclaredFields() 메소드를 사용하면 된다.
Arrays.stream(bookClass.getDeclaredFields()).forEach(f -> {
try {
f.setAccessible(true);
System.out.printf("%s %s \n", f, f.get(book));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
});

위와 같이 setAccessible(true)를 사용하면 private한 값에도 접근이 가능하다.
Arrays.stream(bookClass.getMethods()).forEach(System.out::println);
bookClass의 메소드 뿐만 아니라 Object의 메소드도 출력된다.