공부/Java
Java Reflection API 의 헷갈리는 get 메서드 비교하기
d02
2023. 9. 13. 23:34
getName() vs getCanonicalName()
둘 다 Class 객체나 Package 객체의 이름을 반환한다.
그런데 GetCanonicalName은 객체의 정규화된 이름을 반환한다.
- 예시) 내부 클래스를 반환할 때
- getName() : `com.example.OuterClass$InnerClass`
- getCanonicalName() : `com.example.OuterClass.InnerClass`
- 예시) 배열 이름을 반환할 때
- getName() : `[java.lang.String[]]
- getCanocinalName() : `java.lang.String[]`
getFields() vs getDeclaredFields()
- getFields() 는 해당 클래스 또는 인터페이스의 accessible public fields를 반환한다. 따라서 private field는 가져올 수 없다.
- getDeclaredFields()는 해당 클래스 또는 인터페이스에 정의된 모든 fields를 반환한다.
getMethods() vs getDeclaredMethods()
- getMethods()
- 해당 클래스 또는 인터페이스가 선언한 모든 public 메서드
- 상위 클래스 또는 인터페이스에서 상속한 메서드
- 상위 클래스 또는 인터페이스의 모든 public 메서드
- 말 그대로 해당 클래스 또는 인터페이스에서 호출할 수 있는 모든 메서드를 다 가져온다.
- getDeclaredMethods()
- 해당 클래스 또는 인터페이스가 선언한 모든 메서드를 접근 제어자와 상관 없이 모두 반환
- 하지만 단순 상속한 메서드는 반환하지 않는다.
- 재정의한 메서드는 반환한다.
JavaDocs를 참고하고 정리하였다.
반응형