java 板


LINE

※ 引述《huge (huge)》之铭言: : 抱歉,本篇文章回应 qrtt1 及 alien 板友的回答 ^^ : 首先,在method传递的时候,确实无法将 BigType.MiddleType1.A 视为是一个 BigType : 而是一个 MiddleType1 : 因此,在这个 abstract class 下,如果我有 MiddleType1 以及 MiddleType2 的 Enum class : 那麽在method传递过程中,就只能依照所有的 Enum class 去进行 overload : 例如 : public void ProcessEnum(MiddleType1 mt1) : public void ProcessEnum(MiddleType2 mt2) : 而不能单纯地使用 : public void ProcessEnum(BigType bt) : 去处理所有 BigType 这个 class 下的所有 Enum class : <D>: : 然而要在method中传递这个 BigType.MiddleType1.A 的时候 : : 你意思是你想把它视为 BigType 还是怎样?.. : 是的!!!! 那这就是 is-a 的关系, 代表你想做 inheritence 了 : : 这个不会是同一个吧. : : BigType.MiddleType1 和 BigType.MiddleType2 是不同的 enum (class). : : 两者的 A 虽然名字一样但不可能是同一个值. : : 如果你说的是其 Ordinal value or string value, 这个 : : 与 nested 与否就没关系了 : 嗯,我表达的不完整,应该说这两个值会有一样的可能性 (ordinal value) 因为那是两个不同的 enum, 有一样的 ordinal value 也正常呀. 还有你不该依赖 ordinal value 去处理吧, enum 本身就是 一个好好的 type. : 上面的例子可能不够容易说明,举个最近Java板流行的例子好了 : 小弟想用 nested enum 的原因如下 : 忍者 { : public enum 火影村 { : [DescriptionAttribute("奶奶")] : 纲手, [43] : } : } : 所以,如果我想利用DescriptionAttribute取得某个忍者的中文说明 : 那麽,便得知道这个忍者是属於火影村、风影村、甲贺、或是伊贺了 : 在处理上就麻烦许多 :( : 不知道这样的例子大家能不能接受 ^^" 简单来答一句就是这种情况不该用 enum, 因为 1) enum 是很 static 的东西, 但明显你的例子中的忍者们 该是 Object instance 而非 enum 2) 甲贺伊贺 etc 也该是 object 的 attribute 而非 enum 的 "type". 你不能单以一句 "方便" 就乱来的吧? :) 3) 既是 is-a 关系, 你用火影村也不对, 火影村 并非 "is-a" 忍者 其实我比较倾向你提供一个真实 real life 的 example. 忍者火影村这个例子在现在这个情况下并不是很合理的 例子. 有一个真实例子我想大家才能告诉你怎样做会比 较合理. 一般的 enum inheritence 做的也只是基於某 enum 再新增新的 enum value. 但这也有一些 ambiguity 要 resolve. e.g. enum OrderState { RECEIVED, PROCESSING, DELIVERED } enum PreOrderState extends OrderState { GOODS_RESERVED } 类似这种. 但这种的 inheritence 和 class/object 又不太一样了. 比如, OrderState.values 我究竟应不应该 包括 PreOrderState.GOODS_RESRVED? 一个method parameter 要接收一个 OrderState, 你传一个 PreOrderState 进去又合理吗? 细心想想你就会发觉这类 inheritence 是有点古怪的东西. alien alien --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 202.155.236.82
1F:推 huge:感谢,思考继承中 >_< 03/06 23:22
2F:推 qrtt1:思考用集合来搞定吧:P 03/07 14:25







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