java 板


LINE

※ 引述《oldhead1029 (想不到)》之铭言: : 最近也在看Generic,实在有点搞不懂Generic的真正功用在那? : 以Map来说好了,如果程式是我们自己写的,我们一定会知道 : 里面放的是什麽型别.... : 如果使用泛型(觉得名字怪怪的,反而违反「泛」字..纯自己的想法) : 放了别的型别的物件也是会错,跟我们在一般的取Map里的物件转型错 : 一样意思不是吗?而且相同物件不是反而限制了Map这类collection的 : 功用吗? : 有没有大大可以举个在工作上写程式会用到的例子呢? : 谢谢! 考虑介面和共同的父类别 public AbstractCollection<Component> getComponents() {...} 这样写的话,只要是 Component 的子类别都可以加入这个容器 public Map<String, Runnable> getMap() {...} 这个 Map 的 Key 型态必须是字串; Value 型态则必须实作 Runnable 介面 这样来看的话, Generic 并没有真的限制了容器的功用 反而加强了语法的结构,试想以後再也不用刻意为了一个未知的型态做强制转型 例如: AbstractCollection collection = new Vector(); String result = (String) collection.iterator().next(); ^^^^^^^^ 过去在这边都得加上强制转型 但是一旦有了 Generic 之後,强制转型的工作就可以省下了 例如: AbstractCollection<String> collection = new Vector<String>(); String result = collection.iterator().next(); ^ 不再需要强制转型了 再说,针对介面写程式,本来就是 OO 设计师的守则之一 在 Map<K, V> 的括号(?)里填入适当的 Interface ,才能让 Generic 的优点充分发挥 试想一个专案中有许多相似的类别,并且实作同一个 Interface 在容器中取出这些物件时,我们不用理会它是哪一个子类别的实体 只要藉由多型的优点,针对它的介面去操作就可以了 例如: public static void main(String argv[]) { AbstractCollection<Runnable> collection = new Vector<Runnable>(); collection.add(new PrintA()); collection.add(new PrintB()); collection.iterator().next().run(); } class PrintA implements Runnable { public void run() { System.out.println("A"); } } class PrintB implements Runnable { public void run() { System.out.println("B"); } } 一般的程式并不会像这个例子这麽做作 在实务上,当你发现加入容器的型态都实作某个介面或父类别时 (通常都是如此) 就可以开始考虑是否有必要在容器加上 <E> 这样的 Generic --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.205.85







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP