programing

필드가 리플렉션을 통해 유형의 인스턴스인지 확인하는 방법은 무엇입니까?

randomtip 2021. 1. 18. 07:55
반응형

필드가 리플렉션을 통해 유형의 인스턴스인지 확인하는 방법은 무엇입니까?


필드가 어떤 유형의 인스턴스인지 리플렉션을 통해 알아 내고 싶습니다 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 사용할 수 있습니다.

참조 URL : https://stackoverflow.com/questions/2262322/howto-find-out-if-a-field-is-instanceof-a-type-via-reflection

반응형