JAVA泛型构造器问题

来源:百度知道 编辑:UC知道 时间:2024/06/19 14:21:28
先看以下代码
(1)
ArrayList<Object> test1=new ArrayList();
这里为什么可以?一边是泛型,一边是普通构造子而已啊!

(2)
ArrayList<? extends String> test2=new ArrayList<String>();
这里是用到通配符<? extends T>所包含的意思是String的某种子类,但为什么可以用父类的构造子去生成对象?

为了所有不懂的朋友请高手详细解析,谢谢!

ArrayList<Object> test1=new ArrayList();
是因为 ArrayList 默认的就是存放Object类对象.

ArrayList<? extends String> test2=new ArrayList<String>();
这里是用到通配符<? extends String>所包含的意思是String类或者其子类,并不是说非要放子类才行

因为这是通配符的上限<? extends String>的用法,所以当然可以放入子类了,不知道我说明白没

而楼主认为的ArrayList<Object> test1=new ArrayList<String>,你根本没定义通配符的上限,所以这和通配符的上限是2回事

ArrayList<Object> test1=new ArrayList();
是因为 ArrayList 某认的就是存放Object类对象.

你的第二个人问题我也不知道。
我查查看,知道了,百度里密你。

第一个必须两个变量的类型都是一样的,一定要是ArrayList<Object> test1 = new ArrayList<Object>;要不你就写成这样ArrayList test1 = new ArrayList(),你声明一个存放Object的数组,new的话也一定要是这个类型,第二个问题的话估计是java的一种特殊写法,这个我想是这样的:是String类的子类的话就要继承了父类中所有的方法,这也就相当于String了。