zoukankan      html  css  js  c++  java
  • java 泛型的几点备忘

    1、在java虚拟机中是没有泛型的,所有泛型类的参数都会被擦除,如下:

    public void test(List<String> list, int num){}
        
    public void test(List<Integer> list, int num){}

    这两个方法对于java编译器来说是一样的,因此无法编译通过。

    2、下面两种写法都是OK的,但推荐用后者:

    public <I extends Fruit> void test(List<I> list){}
            
    public void test(List<? extends Fruit> list){}

    3、关于<? extends >和 <? extends >

            //<? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类
            //<? super T> 表示类型下界,表示参数化类型是此类型的超类型(父类型)
            
            List<? extends Fruit> list = new ArrayList<Apple>();
            //flist.add(new Fruit()); 编译错误
            list.add(null);
            Apple apple = (Apple) list.get(0);
            Fruit item  = (Fruit) list.get(0);
            
            List<? super Fruit> list1 = new ArrayList<Fruit>();
            list1.add(new Fruit());
            list1.add(new Apple());
            list1.add(null);
            
            Fruit item1 = (Fruit) list1.get(0);
            //Apple apple = (Apple)list1.get(0);编译错误
  • 相关阅读:
    【Spring Framework】10、代理模式
    【Spring Framework】8、使用注解开发
    Codeforces 516E
    AtCoder Grand Contest 055 题解
    Codeforces 1606F
    贪心/构造/DP 杂题选做
    整数拆分最大乘积
    CSP-S2021 被碾压记
    洛谷 P2791
    LCT 小记
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/4577345.html
Copyright © 2011-2022 走看看