자바 유형 비교

Original post: Flashreads Blog - Type Comparison



주어진 객체가 주어진 클래스, 슈퍼클래스 또는 인터페이스의 인스턴스인지 확인하는 가장 일반적인 방법은 이진 연산자instanceof를 사용하는 것입니다. 여기에는 암시적 null 검사가 포함되며 형식이 관련되지 않은 경우 컴파일 타임 오류가 생성됩니다. 그러나 프리미티브를 허용하지 않으며 컴파일 타임에 유형을 알아야 합니다.

런타임에 동적으로 확인하려는 경우


boolean isInstance(Object obj) 에서 동등한 방법Class을 사용합니다. 또한 null 검사를 포함하지만 프리미티브를 허용합니다.

    a instanceof B 
    // returns false for null
    null instanceof B

    a.getClass().isInstance(b);
    // commonly used for generics
    Class<T> type = b.getClass();
    type.isInstance(a);

    // Note that the parameter is autoboxed to type Integer
    int x = 4;
    Integer.class.isInstance(x);


두 가지 유형의 호환성 확인



하위 유형 관계를 확인해야 하는 경우 boolean isAssignableFrom(Class<?> cls)Class 방법을 사용하십시오. NullPointerException이 발생할 수 있습니다.

    // is it possible to B b = new A()
    Class<?> aClass = CharSequence.class;
    Class<?> bClass = String.class;
    bClass.isAssignableFrom(aClass());

    // works for arrays
    CharSequence[].class.isAssignableFrom(String[].class); // true
    Integer[].class.isAssignableFrom(String[].class); //false


패턴 매칭(자바 14)




    if(a instanceof B b) {
        // b is casted
        b.toString();
    }


특수 유형




    // Enums
    enum Color { WHITE, GRAY, BLACK }

    Color.class.isEnum(); // Enum.class.isAssignableFrom(Color.class); 
    Color.WHITE instanceof Enum; // true

    // Arrays
    String[].class.isArray();
    // get the type of the variables in an array (null if obj is not an array)
    Class<?> componentType = obj.getComponentType(); 

    // Primitives
    int.class.isPrimitive();

좋은 웹페이지 즐겨찾기