java 泛型通配符与super、extends使用的相关问题原理

public void test(List<? extends Number> list) {
        // 在该方法中只能知道list的参数类型是Number的子类,但并不知道具体是哪个子类
        // 所以,不能在该方法中往list添加数据
        // 假设,别人调用该test方法,传进来的list是List<Integer>类型的,
        // 如果在该test方法中允许往list添加数据,那么,写这个test方法的只能知道list的元素类型是Number及其子类
        // 只要往list中添加了Number及其子类类型不是Integer类型,那么岂不是导致外部传进来的
        // List<Integer> list的某个元素变成非Integer类型的。。。这肯定不行
    }

    public void test2(List<? super Integer> list) {
        // 在该方法中只能知道List的参数类型是Integer及其父类,但并不知道具体是哪个父类
        // 所以,该方法的编写者获取list的元素的类型,只能确定一定是Object的子类,所以返回类型为Object是绝对没问题的。
        // 当外部调用者调用该test2方法时,传进来的list的参数类型只能是Integer及其父类型,
        // 那么,作为test2方法的编写者,往list里添加设置数据时,添加的是Integer类型及其子类型时肯定不会出现类型转换错误
        // 因为外部传进来的list的元素类型只能是Integer及其父类型。
    }

猜你喜欢

转载自blog.csdn.net/qq_36951116/article/details/81096478