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;
        }
        
    }

    。。。未完待续

  • 相关阅读:
    排序算法
    顺序表与链表
    二叉树
    查找算法
    15 Django 离线脚本
    poj 1330 Nearest Common Ancestors(LCA 基于二分搜索+st&rmq的LCA)
    hdu 6158 The Designer( 反演圆)
    圆的反演性质
    HDU 6153 A Secret(扩展kmp)
    kmp&扩展kmp
  • 原文地址:https://www.cnblogs.com/xxxxxiaochuan/p/13735108.html
Copyright © 2011-2022 走看看