zoukankan      html  css  js  c++  java
  • Java-泛型的限制

    1.不能用基本类型实例化参数

    例子:

    List<int> testList = new ArrayList<int>();     //error

    上面的语句会报错。根本原因是因为“类擦除(编译阶段发生的事情)”,擦除之后List类里面的泛型全被替换为Object, 而Object不能存储int的值。

    2.不允许使用instanceOf运算符进行运行时类型检测

    例子:

    package test;
    
    public class test0926 {
        public static void main(String[] args) {
            B<String> b = new B<>();
            System.out.println(b instanceof B<String>);    //编译器报错
            System.out.println(b instanceof B<?>);// true 因为问号表示通配符,表示任意类型,所以这里的B是泛型类。
            System.out.println(b instanceof B);//true 这里B为原始类,而不是泛型类。
        }
    }
    class B<T>{
        private T a;
    
        public T getA() {
            return a;
        }
    
        public void setA(T a) {
            this.a = a;
        }
        
    }

    结论:不能用instanceOf查询对象是否属于某个泛型类型,因为在虚拟机中,对象只有非泛型的类型。

    同理,getClass方法返回的也是原始类型,例子:

    package test;
    
    public class test0926 {
        public static void main(String[] args) {
            B<String> b = new B<>();
            B<Character> c = new B<>();
            System.out.println(c.getClass() == b.getClass()); //true,因为b,c的原始类型都是B
        }
    }
    class B<T>{
        private T a;
    
        public T getA() {
            return a;
        }
    
        public void setA(T a) {
            this.a = a;
        }
        
    }

    。。。未完待续

  • 相关阅读:
    P1182 数列分段Section II
    P1119 灾后重建
    P1133 教主的花园
    P1077 摆花
    P2002 消息扩散
    P2341 [HAOI2006]受欢迎的牛(tarjan+缩点)
    luoguP1726 上白泽慧音
    P1053 篝火晚会
    P2296 寻找道路
    P1156 垃圾陷阱
  • 原文地址:https://www.cnblogs.com/xxxxxiaochuan/p/13735108.html
Copyright © 2011-2022 走看看