15.8 지우기 보상

1273 단어
  • new T()는 실현할 수 없습니다. 지우기 때문에 T에 구조 함수가 있는지 없는지 확실하지 않기 때문입니다
  • package chapter15._8;
    
    public class Erased {
    
        private final int SIZE = 100;
    
        public static void f(Object arg) {
            // if (arg instanceof T) {} // error
            // T var = new T(); // error
            // T[] array = new T[SIZE]; // error
            // T[] array = (T)new Object[SIZE]; // error
        }
    
    }
    
    package chapter15._8;
    
    class Building {}
    class House extends Building {}
    
    public class ClassTypeCapture {
    
        //  
        Class kind;
    
        public ClassTypeCapture(Class kind) {
            this.kind = kind;
        }
    
        public boolean f(Object arg) {
            //  arg kind, true
            return kind.isInstance(arg);
        }
    
        public static void main(String[] args) {
            ClassTypeCapture ctt1 = new ClassTypeCapture(Building.class);
            System.out.println(ctt1.f(new Building()));
            System.out.println(ctt1.f(new House()));
    
            ClassTypeCapture ctt2 = new ClassTypeCapture(House.class);
            System.out.println(ctt2.f(new Building()));
            System.out.println(ctt2.f(new House()));
        }
    
    }
    

    출력
    true true false true

    좋은 웹페이지 즐겨찾기