[Java]泛型中值得注意的点

来源:互联网 发布:str split php 编辑:程序博客网 时间:2024/06/06 03:28
  • 泛型(generic)是指参数化类型的能力。
  • 可定义带泛型类型的类/方法/接口,随后编译器会用具体的类型替换它。
  • 使用泛型的主要优点:
    能在编译时而不是运行时检测出错误。
  • 泛型类型必须是引用类型。
  • 创建对象时:例new GenericStack<String>()
    但构造方法实际定义是:例new GenericStack()
  • 可将泛型指定为另一种类型的子类型,这样的泛型类型称为受限的。
  • 定义一个类为泛型类型,需将泛型类型放在类名后面;
    例:GenericStack<E>
    定义一个方法为泛型类型,要将泛型类型放在方法返回类型之前;
    例:<E> void max(E o1,E o2)
  • 不使用类型参数的泛型类称为原始类型;
    例:GenericStack stack=new GenericStack();
  • 通配泛型类型的三种形式:
    ? 非受限通配 <=>? extends Object
    ? extends T 受限通配 T或T的一个未知子类型
    ? super T 下限通配 T或T的一个未知父类型
  • 举例说明:尽管Integer是Object的一个子类型,但GenericStack<Integer>并不是GenericStack<Object>的子类型。
  • 泛型是使用 类型擦除(type erasure)的方法实现的。
  • 泛型存在于编译时,泛型信息在运行时是不可用的。
  • 不管实际的具体类型是什么,泛型类是被它的所有实例所共享的。
  • 由于泛型类型在运行时被消除,因此在使用时有限制:
    1.不能使用泛型类型参数来创建实例;
    例:new E()
    2.不能使用泛型类型参数来创建数组;
    例:E[ ] elements=new E[capacity];
    规避方法:E[ ] elements=(E[ ])new Object[capacity];—–会有警告
    3.不能在静态环境中使用类的泛型类型参数;
    4.异常类中不能使用泛型类型参数。
原创粉丝点击