Think in java 里面的泛型问题

擦除机制

    Java中的泛型基本上都是在编译器这个层次来实现的,在生成的Java字节码中是不包含泛型中的类型信息的。

    使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉,这个过程就称为类型擦除。

        例如

    List<Object> 和 List<String> 会被擦除机制变成 List

    JVM看到的只是List,而由泛型附加的类型信息对JVM来说是不可见的

    泛型类型只有在静态类型检查期间才会出现,在此之后,所以泛型类型都将被擦除,替换为他们的非泛型上界

    泛型列表中 entends 定义泛型上界  super 定义了泛型下界

    例如 <Has extends HasP> 那么泛型 Has 在静态类型检查期间才会出现,那么在之后,Has会被擦除,替换为 HasP 这个泛型上界

    如果泛型列表中没有定义泛型的上界,那么泛型在擦除机制的作用下会变成 Object

    擦除丢失了在泛型代码中执行某些操作的能力 任何在运行时需要知道确切类型信息的操作都无法完成

泛型的自限定

    自限定将强制泛型当做自己的边界参数来使用。

评论

热门博文