作者aoksc (重出江湖)
看板java
标题[问题] 关於泛型型态参数的问题
时间Sun Oct 9 23:30:45 2011
请问
譬如说有个叙述是这样写的
List<Integer> x=new ArrayList<Integer>();
请问前面的ArrayList<Integer>跟後面的ArrayList<Integer>()
请问在型态参数上两者分别代表什麽意义呢?
会这样问是因为书上有提到
List<Object> y=x;
像这样会有编译上的错误
我刚刚想到的解释不知道对不对
在new ArrayList<Integer>()这段的Integer决定ArrayList物件的实际型态参数
而在前面的List<Integer>部份
则是决定我在传入参数给予这个ArrayList实体物件可以传入的型态
所以如果执行
y.add(new Object());
这样是可以的
因为传入的物件满足Object或Object的子类别这条件
但如果使用x.get(0);
将会因为回传的实际型态是Integer而非Object因而发生错误
上面的解释感觉漏洞百出= =
恳请诸位高手补完~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 124.8.146.227
1F:→ chchwy:建议你自己去写一个简单的Generic Class就知道意思了 10/09 23:31
2F:→ chchwy:然後去看看编译器抛出来的错误讯息 10/09 23:37
3F:→ james732:List是个interface, 而ArrayList是继承它的class 10/09 23:43
4F:→ james732:上面说「继承」怪怪的,应该说「实作」比较正确 10/09 23:57
5F:→ mars90226:List那边是说你把这个变数看成什麽型态,ArrayList则是 10/10 15:23
6F:→ mars90226:你实际传给该变数储存的物件 10/10 15:25
7F:推 lachtchlee:interface oriented面向接口 介面导向 10/10 19:28