作者noapaov (单身汉)
看板java
标题[问题] 关於泛型 资料型态的疑问
时间Wed May 27 16:00:11 2015
请问一下各位大大关於泛型操作上的问题,
ParentList p = new ChildList();
这段code 代表变数p可以呼叫parentList的所有成员, 而执行的时候是呼叫childList.test()实体
但我在使用泛型的时候, 范例如下
ArrayList obj = new ArrayList<Integer>();
其实等同 ArrayList<Object> obj = new ArrayList<Integer>();
表示我可以加入任何的物件到obj里面, 这时执行obj.add("test");
编译器没有报错我的理解是因为我宣告的是ArrayList<Object> obj,
但为什麽我在 "执行" obj.get(0)时, 不会有问题, 还是印出"test"
实际呼叫的物件回传的不是Integer型态吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 203.69.59.91
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1432713613.A.799.html
1F:推 Killercat: "test"可以自动转型成Object 所以会过 05/27 16:24
2F:→ Killercat: 然後Object的toString()也会往下找,String继承 05/27 16:25
3F:→ Killercat: Object所以会跑String.toString() 05/27 16:25
4F:→ Killercat: 另外你这写法实在是危险到爆炸,请务必小心 05/27 16:25
5F:→ Killercat: 诶...我好像误解你想问的问题了...先跳过 XD 05/27 16:26
※ 编辑: noapaov (203.69.59.91), 05/27/2015 17:00:23
6F:推 cowbaying: 这就是java伟大且神奇的地方 囧 05/27 17:47
※ 编辑: noapaov (203.69.59.91), 05/27/2015 18:35:03
7F:→ ssccg: 上面没多远就有人问过类似的... 05/27 18:44
8F:→ ssccg: 回传的是Object,印出来想必是直接丢到sout.print(Object) 05/27 18:45
9F:→ ssccg: java没有实体物件泛型,java的generic完全是个compile-time 05/27 18:46
10F:→ ssccg: 检查,你这写法ArrayList<Integer>这型别只用在确定可以 05/27 18:47
11F:→ ssccg: assign给ArrayList,之後就没了 05/27 18:48
12F:→ ssccg: 实际执行是不管是add还是get,既然是ArrayList都是Object 05/27 18:49