[问题] 关于泛型 资料型态的疑问

楼主: noapaov (单身汉)   2015-05-27 16:00:11
请问一下各位大大关于泛型操作上的问题,
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型态吗?
作者: Killercat (杀人猫™)   2015-05-27 16:24:00
"test"可以自动转型成Object 所以会过然后Object的toString()也会往下找,String继承Object所以会跑String.toString()另外你这写法实在是危险到爆炸,请务必小心诶...我好像误解你想问的问题了...先跳过 XD
作者: cowbaying (是在靠北喔)   2015-05-27 17:47:00
这就是java伟大且神奇的地方 囧
作者: ssccg (23)   2015-05-27 18:44:00
上面没多远就有人问过类似的...回传的是Object,印出来想必是直接丢到sout.print(Object)java没有实体物件泛型,java的generic完全是个compile-time检查,你这写法ArrayList<Integer>这型别只用在确定可以assign给ArrayList,之后就没了实际执行是不管是add还是get,既然是ArrayList都是Object

Links booklink

Contact Us: admin [ a t ] ucptt.com