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及其父类型。
}