作者PsMonkey (痞子军团团长)
看板java
标题Re: [问题] 一个关於自订Exception的问题
时间Thu Aug 1 16:55:38 2013
坦白说,我看不懂......
※ 引述《NullLife (哀莫大於心死)》之铭言:
: 小弟我现在在某个大专案底下写单支的程式功能,上头会来呼叫我写的程式做事情,
: 那现在我想要自己自订一个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
: 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
我也不懂为什麽要讲这个继承关系...
(这 naming style 也好妙阿.... Orz)
: 最一开始我是在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);
: }
: }
: }
我不懂为什麽 ToolClass_C 跟 WorkClass_C
要个别有自己的 KerkerException
(基本上你已经知道这两个只是同名,但不是同一个 class 了)
: → popcorny:看到晕了.. @@ 08/01 15:31
原来我不孤单 [泪目]
: 推 PsMonkey:我觉得炸点在於... 你为什麽会觉得这是同一个 Kerker.... 08/01 15:31
: 後来才惊觉不是同一个>"<
: → swpoker:为何kerkerException是放在interface里面阿??? 08/01 15:34
: 原本是想找最上层放, 就丢在那了
看不懂
: 对不起,我又有新的问题...
: 那这样我catch的时候,变成ToolClass要写一段catch, WorkClass也要写一段catch
: 可是我两段要做的事情是一样的耶,有办法写在一起处理吗?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
: try {
: process(); // 里面有可能会有ToolClass丢出来的KerkerException
: // 也有可能是WorkClass run到一半丢出来的KerkerException
: } catch (WorkClass.KerkerException wke) {
: wke.printStackTrace();
: } catch (ToolClass.KerkerException tke) {
: tke.printStackTrace();
: }
我之所以打出一堆「看不懂」并不是要酸人
而是我怀疑促使你这样作的原因,可能就在那些落落长的叙述中
只是可能是你笔拙、更可能是我眼拙
所以我看不出来「为什麽」要这样作?
如果要做的事情都一样,甚至你连名字都取一样
那为什麽不把 KerkerException 独立出来变成「一个」class
而不是有「两个」KerkerException?
我唯一想到的可能就是你要分辨到底是 WorkClass 炸的还是 ToolClass
但是这又跟「^」的那句矛盾......
要是撇开这个矛盾,还有那一堆看不懂的
那......
那两个 KerkerException 不要直接继承 RuntimeException
中间再多加一个祖先 FooException
要抓就抓 FooException
这样?
--
钱锺书:
说出来的话
http://www.psmonkey.org
比不上不说出来的话
Java 版 cookcomic 版
只影射着说不出来的话
and more......
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.25.2.138
1F:推 NullLife:我不另外写一个class是因为专案问题 08/01 16:59
2F:→ NullLife:开一个档出来很麻烦 再来写第一段是因为我觉得会有人问我 08/01 17:01
3F:推 NullLife:原因 所以先讲了, name是我临时改的 不想直接贴工作code 08/01 17:03
4F:→ NullLife:讲继承关系 是想说两个分支下来没有相同的父类别 08/01 17:05
5F:→ NullLife:可能我没把重点说出来导致这样 sorry 08/01 17:07
6F:→ NullLife:其实我觉得要酸就酸 反正我就是菜才会被酸 08/01 17:09
7F:→ NullLife:但我就是喜欢写code啊 总会进步的 08/01 17:11
8F:→ NullLife:最後我想请问 为什麽中间要多一个FooException 而不直接 08/01 17:13