java 板


LINE

小弟我现在在某个大专案底下写单支的程式功能,上头会来呼叫我写的程式做事情, 那现在我想要自己自订一个Exception物件(以下我称KerkerException) 当我在我自己这边最上层catch到这个KerkerException的时候, 我就只getMessage()给user看到我想给他看的讯息, 若是catch其它Exception的时候,我想要显示StackTrace, 因为若都将StackTrace都写到LOG里去,USER看到一大串就以为是程式爆炸了 但实际上我只是想要让user看到简单的一个讯息,告诉他可能你资料有错误或者参数下错之类的。 那现在重点是我有一个共用的ToolClass,我也想利用这个方式处理 在我呼叫ToolClass里的method做事情时,也会丢KerkerException出来, 最上层我就可以catch这个Exception来只显示getMessage()的讯息。 先讲一下我work的程式跟ToolClass所继承的关系 WorkClass1 extends WorkClass_D implements WorkClass_E WorkClass_D extends WorkClass_B implements WorkClass_C WorkClass_E extends WorkClass_C WorkClass_C extends WorkClass_A 写成直向的话(我觉得这样比较好看) WorkClass1 extends WorkClass_D extends WorkClass_B implements WorkClass_C extends WorkClass_A implements WorkClass_E extends WorkClass_C extends WorkClass_A (还有其它WorkClass2, WorkClass3, ...都是同样的继承模式) ToolClass extends ToolClass_D implements ToolClass_E ToolClass_D extends ToolClass_B implements ToolClass_C ToolClass_E extends ToolClass_C ToolClass_C extends ToolClass_A ToolClass extends ToolClass_D extends ToolClass_B implements ToolClass_C extends ToolClass_A implements ToolClass_E extends ToolClass_C extends ToolClass_A 结尾的地方(A跟B)已经是专案底层固定的class,不是我这个层级能够自己修改的了... 最一开始我是在WorkClass_C, ToolClass_C里分别加上KerkerException,就像以下写的 public interface WorkClass_C extends WorkClass_A { @SuppressWarnings("serial") class KerkerException extends RuntimeException { public KerkerException(String message) { super(message); } } } public interface ToolClass_C extends ToolClass_A { @SuppressWarnings("serial") class KerkerException extends RuntimeException { public KerkerException(String message) { super(message); } } } 在WorkClass1, WorkClass2, ...跟ToolClass里分别都认得KerkerException 但当我ToolClass在WorkClass1里丢出KerkerException的时候, 会一直掉到WorkClass1的Exception里,而不是catch到KerkerException... 後来才惊觉应该是两个所认得的KerkerException根本不是同一个, 才想说再往上找有没有继承同样的老爸,结果居然在不是我能修改的层级的地方... 所以我现在不知道怎麽让WorkClass1, WorkClass2, ... 跟ToolClass能够认得同一个KerkerException?? 又或者是有什麽其它方法能够达成我最初的目的? 希望有版大能提供我解答或方向,感恩。 -- 所以想着昨天期待明天 我却活在这两者的中间 现实的问题那麽讨厌 可是不得不面对 和平奖的礼物是金钱 领导运动获得了地位 黄玠 矛与盾的故事不断上演 到底什麽才是对 相片收集簿 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 115.82.254.32
1F:推 Killercat:catch exception的时候用qualified name 08/01 15:11
哇哇~感谢大大!! 原来要这样qualified name取用才会catch到,学到了~感恩<(_ _)>
2F:→ popcorny:看到晕了.. @@ 08/01 15:31
3F:推 PsMonkey:我觉得炸点在於... 你为什麽会觉得这是同一个 Kerker.... 08/01 15:31
後来才惊觉不是同一个>"<
4F:→ swpoker:为何kerkerException是放在interface里面阿??? 08/01 15:34
原本是想找最上层放, 就丢在那了 ※ 编辑: NullLife 来自: 115.82.254.32 (08/01 15:40)
5F:→ swpoker:那就不一样了喔~当然你可以从名子去分~但是不同的class喔 08/01 15:52
嗯嗯,问题解决了~感谢各位<(_ _)> ※ 编辑: NullLife 来自: 115.82.254.32 (08/01 16:05) 对不起,我又有新的问题... 那这样我catch的时候,变成ToolClass要写一段catch, WorkClass也要写一段catch 可是我两段要做的事情是一样的耶,有办法写在一起处理吗? ※ 编辑: NullLife 来自: 115.82.254.32 (08/01 16:18)
6F:→ swpoker:你可以把两段的CODE放上来闻香一下吗 08/01 16:25
嗯,大致上是这样... try { process(); // 里面有可能会有ToolClass丢出来的KerkerException // 也有可能是WorkClass run到一半丢出来的KerkerException } catch (WorkClass.KerkerException wke) { wke.printStackTrace(); } catch (ToolClass.KerkerException tke) { tke.printStackTrace(); } 我刚试了一下,因为WorkClass跟ToolClass的KerkerException不是同一个 所以我要这样才不会漏掉其中一个,而掉到Exception里 而他们的动作其实都一样,所以我原本想找他们两个有相同extend或implements的东西 写在那边一次解决了,很可惜没有... ※ 编辑: NullLife 来自: 115.82.254.32 (08/01 16:38)
7F:→ swpoker:catch (IOException|SQLException ex) (7) 08/01 17:06
8F:→ swpoker:那要用桥接吗?不然就是整理一下方法就可以了啦 XD 08/01 17:08
感谢,不过我刚要桥接时发现好像JRE1.7才支援这个写法...? 但我刚发现一个写法, 但我不确定是否会影响其他继承的class 我在tool继承支线里发现一段很乾净(目前是什麽都没有XD)的interface继承 原本打算写在那边, 然後work再去implements它 但想了想不太对, 既然一开始设定两边继承支线就拆开了, 到後面我还把它绑在一起, 万一後续tool那边有要新实做什麽东西 是work那边不需要做的事情, 好像有点麻烦... 於是我在那个interface里又塞了一段interface,变成↓ public interface ToolClass_C extends ToolClass_Fathers { interface OwnException { @SuppressWarnings("serial") public class KerkerException extends RuntimeException { /** * 自定错误讯息 * @param message message */ public KerkerException(String message) { super(message); } } } } 然後work跟tool再去implements ToolClass_C.OwnException 这样就变成会是同一个KerkerException 但我不晓得这样写, 对後续会不会照成影响? 因为不只有我负责的程式会去继承这些东西, 所以我现在没有很确定这样写到底OK不OK...? ※ 编辑: NullLife 来自: 115.82.254.32 (08/01 17:58)
9F:→ Killercat:er..不是一定得挂qualified name, 是要看你import 08/01 18:19







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灯, 水草

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

TOP