클래스 API에서 getDeclaredConstructors와 getConstructors의 차이점은 무엇입니까?
Java Reflection API에는 생성자를 호출하는 두 가지 다른 메서드 인 getDeclaredConstructors
/ getConstructors
메서드가 있습니다. Java 문서가 약간 다르지만 ( getDeclaredConstructors
공개 생성자가 아닌 모든 생성자를 반환하는 것으로 암시 됨) API가이 두 가지 다른 메서드를 명시 적으로 지원하는 이유는 명확하지 않습니다.
더 중요한 것은 궁금합니다. 클래스를 동적으로 호출하는 경우 언제 한 메서드가 다른 메서드보다 더 좋을까요? 예를 들어 개인 생성자에 액세스하는 목적은 무엇입니까?
getDeclaredConstructors
( 모든 생성자 를 원할 때 )
이 Class 객체가 나타내는 클래스가 선언 한 모든 생성자를 반영하는 Constructor 객체의 배열을 리턴합니다. 이들은 공개, 보호, 기본 (패키지) 액세스 및 개인 생성자입니다.
getConstructors
( 생성자 만public
원하는 경우 )
이 Class 객체가 나타내는 클래스의 모든 공용 생성자를 반영하는 Constructor 객체를 포함하는 배열을 리턴합니다.
그래서, 그 모두에 대한 문서보고, 나는 차이가 생각 getConstructors
만 반환 public
생성자 동안 getDeclaredConstructors
반환 모든 생성자 ( public
, protected
, 디폴트 (package) 액세스, 및 private
)
따라서 public
생성자 만 필요한 경우 getConstructors
. 그렇지 않고 모든 생성자가 필요한 경우 (생성자의 액세스 수정 자에 관계없이) getDeclaredConstructors
.
getDeclaredXX()
방법은 반드시 해당 클래스의 제작자가 의도하지 않은 방법으로 클래스의 조작을 위해 존재한다. getDeclaredMethod()
개인 메서드를 호출 할 수 있는 메서드와 getDeclaredField()
개인 필드를 가져 오거나 설정할 수있는 메서드가 있습니다.
"합법적 인"사용 사례에 대해 완전히 확신 할 수는 없지만 특정 작업을 수행하는 데는 분명히 유용합니다. 또한이 메서드 패밀리는 클래스에서 특별히 선언 된 것만 반환하고 수퍼 클래스로 인해 클래스에 존재하는 것은 반환하지 않습니다.
개인 생성자에 액세스하는 것도 같은 이유로 유용 할 수 있습니다.
'getDeclaredConstructors'메서드는 클래스 내부에 선언 된 생성자 만 반환합니다. 'getConstructors'메소드는 클래스 내에서 선언되지 않았지만 슈퍼 클래스에서 상속 된 생성자를 반환합니다.
그래서 그것은 당신이 무엇을 할 것인지에 달려 있습니다. 올바른 접근 방식은 없으며 슈퍼 생성자가 필요한지 여부에 따라 다릅니다.
내가 사용하는 getDeclaredConstructors
직접 공장을 사용하지 않고 생성자 내 시스템의 "사용자가"이러한 클래스를 만들 수 있다는 것을 피하기 위해 비공개 클래스의 공장을 만들 수 있습니다. 이 방법은 매우 유용합니다.
'IT Share you' 카테고리의 다른 글
장치 'emulator-5554'에 * .apk를 설치하지 못했습니다. EOF (0) | 2021.01.08 |
---|---|
규정 된 ID / 이름 및 규정되지 않은 ID / 이름은 무엇입니까? (0) | 2021.01.08 |
Android 스튜디오 : 실패 [INSTALL_FAILED_OLDER_SDK] (0) | 2021.01.08 |
Java 및 기본 신뢰 저장소 사용 (0) | 2021.01.08 |
mean, nanmean 및 warning : 빈 슬라이스의 평균 (0) | 2021.01.08 |