zoukankan      html  css  js  c++  java
  • 泛型的理解

    --.泛型是编译器层面上的而不是虚拟机上的,虚拟机上不存在泛型.

    x.可以使用泛型的有 类,接口和方法.泛型方法可以直接定义在普通类中

    方法的如下:

    public <T> T getT(T t);
    
    public static <T extends Abc> T getT(T t);
    <T> 是必须存在的,可以限定返回值和参数T

    x.泛型在jvm 中执行的时候,也就是说参数类型被擦除时,是使用类型参数的上边界来确定的,即最父类.如 List<T>(List<String> 是List<T>的一个实例类型,在jvm 中也是Object) 那么T 在jvm 中就是Object 对象.如果是 List<T extends String> 那么 T 在jvm 中就是String.

    ---.泛型的转换

    1.强制类型转换.

    2.用桥方法保证继承的多态. 

    参考:

    <核心1> 12.5.1 节 p535

    http://jiangshuiy.iteye.com/blog/1339105

    0. 泛型的类型参数不能用在Java异常处理的catch语句中。因为异常处理是由JVM在运行时刻来进行的。由于类型信息被擦除,JVM是无法区分两个异常类型MyException<String>;MyException<Integer>的。对于JVM来说,它们都是 MyException类型的。也就无法执行与异常对应的catch语句。

    1.?通配符所代表的其实是一组类型,但具体的类型是未知的。List<?>所声明的就是所有类型都是可以的。但是List<?>并不等同于List<Object>List<Object>实际上确定了List中包含的是Object及其子类,在使用的时候都可以通过Object来进行引用。而List<?>则其中所包含的元素类型是不确定。其中可能包含的是String,也可能是Integer。如果它包含了String的话,往里面添加Integer类型的元素就是错误的。正因为类型未知,就不能通过new ArrayList<?>()的方法来创建一个新的ArrayList对象。因为编译器无法知道具体的类型是什么。但是对于 List<?>中的元素确总是可以用Object来引用的,因为虽然类型未知,但肯定是Object及其子类。

  • 相关阅读:
    【洛谷P2839】middle
    【洛谷P2495】消耗战
    【CF1438D】Powerful Ksenia
    【CF878E】Numbers on the blackboard
    【洛谷U138580】简单的打击
    【洛谷P4774】屠龙勇士
    【GMOJ5363】生命之树
    【YbtOJ#20075】区间异或
    【YbtOJ#20077】计划带师
    hdu 2688
  • 原文地址:https://www.cnblogs.com/predisw/p/4949800.html
Copyright © 2011-2022 走看看