공부/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를 참고하고 정리하였다.

반응형