필드가 리플렉션을 통해 유형의 인스턴스인지 확인하는 방법은 무엇입니까?
필드가 어떤 유형의 인스턴스인지 리플렉션을 통해 알아 내고 싶습니다 T
.
객체가 있다고 가정 해 봅시다 o
. 이제 인스턴스 인 필드가 있는지 알고 싶습니다 T
. 다음을 사용하여 모든 필드를 가져올 수 있습니다.
o.getClass().getFields();
다음을 사용하여 필드 유형을 가져올 수 있습니다.
field.getType();
하지만 지금은이 유형 또는 수퍼 유형이 같은지 알고 싶습니다 T
. getSuperclass()
모든 상위 유형을 확인하려면 재귀 적 으로 호출 해야합니까?
isAssignableFrom 을 사용해야 합니다 .
오히려 바로크 이름 Class.isAssignableFrom
이 당신이 추구 하는 것입니다. 나는 일반적으로 올바른 방법을 얻기 위해 javadoc을 읽어야합니다.
이 Class 객체가 나타내는 클래스 또는 인터페이스가 지정된 Class 매개 변수가 나타내는 클래스 또는 인터페이스와 동일하거나 수퍼 클래스 또는 수퍼 인터페이스인지 판별합니다. 그렇다면 true를 반환합니다. 그렇지 않으면 거짓을 반환합니다. 이 Class 객체가 기본 유형을 나타내는 경우이 메소드는 지정된 Class 매개 변수가 정확히이 Class 객체이면 true를 반환합니다. 그렇지 않으면 거짓을 반환합니다.
특히,이 메소드는 지정된 Class 매개 변수가 나타내는 유형이 ID 변환 또는 확장 참조 변환을 통해이 Class 객체가 나타내는 유형으로 변환 될 수 있는지 여부를 테스트합니다.
예를 들면 :
public class X {
public int i;
public static void main(String[] args) throws Exception {
Class<?> myType = Integer.TYPE;
Object o = new X();
for (Field field : o.getClass().getFields()) {
if (field.getType().isAssignableFrom(myType)) {
System.out.println("Field " + field + " is assignable from type " + o.getClass());
}
}
}
}
사용자 정의 클래스의 필드 유형을 비교하려면 이것을 시도해야합니다. 기본 유형에만 .TYPE이 있으므로 .class를 사용하십시오.
if(field.getType().isAssignableFrom(**YOURCLASS.class**)){}
의 경우 java.lang.Class # isAssignableFrom 대신 org.springframework.util.TypeUtils # isAssignable (java.lang.reflect.Type, java.lang.reflect.Type)을NullPointerException
사용할 수 있습니다.
'programing' 카테고리의 다른 글
자식 커밋 빈도 (0) | 2021.01.18 |
---|---|
설치 후 서비스 목록에 Windows 서비스가 나타나지 않음 (0) | 2021.01.18 |
숨겨진 항목을 제외한 JQuery 선택 입력 필드 (0) | 2021.01.18 |
epoch에서 날짜 형식 변환 (0) | 2021.01.18 |
동시성 : C ++ 11 메모리 모델의 원자 및 휘발성 (0) | 2021.01.18 |