我想抛出一个具有特定名称的异常,并且这种异常已经存在于双面打包中。从双面软件包中抛出异常是否正确?
E.g. UnexpectedException
in java.rmi
。我没有使用rmi packege的任何设施,但是例外的名称是,正好是我需要的。
我可以在我自己的上下文中抛出异常,或创建一个具有相同名称的新异常。哪种方法更好?
我想抛出一个具有特定名称的异常,并且这种异常已经存在于双面打包中。从双面软件包中抛出异常是否正确?
E.g. UnexpectedException
in java.rmi
。我没有使用rmi packege的任何设施,但是例外的名称是,正好是我需要的。
我可以在我自己的上下文中抛出异常,或创建一个具有相同名称的新异常。哪种方法更好?
仅仅因为名称是正确的并不意味着其他任何东西。看的说明中,例如:如果一个远程方法调用的客户端接收,
的UnexpectedException抛出作为呼叫,检查异常不是在抛出声明的经检查异常类型中的结果远程接口中方法的子句。
这是否实际上描述你的例外试图代表什么?我怀疑不是。假设你是一个客户端 - 你会想知道为什么地球上你不得不赶上(或声明)与RMI有关,尽管你的代码库没有与RMI相关。奇怪的是会在整个代码中传播。伊克。
当您查看例外的完全限定名称时,java.rmi
是其名称的一部分。考虑一个程序员使用你的代码阅读来期待java.rmi
的异常,这可能会引起一阵眉毛,因此是一个坏主意。
考虑到这个例外,特别是:是什么意外?您可以改为命名您的班级UnexpectedSomethingException
,使其更清楚地发生了什么。
@Jon Skeet和@akaIDIOT已经提供了相当不错的答案。我只会添加几个与您的问题相关的示例:
这将是奇怪和困惑从拥有无关,与RMI方法处理java.rmi.UnexpectedException
。
另请注意,例外的主要目的是允许客户端代码处理您无法处理的情况。因此,方法抛出java.io.IOException
的事实意味着客户端代码应负责处理意外的文件输入 - 输出错误(重新检查文件访问/存在,基本设置)。投掷方法java.rmi.UnexpectedException
给客户端代码提示以检查RMI设置
我已经更新了我的答案,谢谢。我很高兴我没有用逗号代替'和'。这将是尴尬。 – 2013-03-13 16:08:39
我强烈建议不要重复使用另一个异常,因为它只是基于它共享所需名称的事实。例如,在RMI的上下文之外抛出一个java.rmi.UnexpectedException将会非常令人困惑。
我不确定你打算如何使用你的异常,但对我来说,完全基于名字,听起来像你可以使用java.lang.RuntimeException,因为它具有相同的一般含义。
所以,我的建议是按以下顺序:
用相同的名称创建并使用它。 – 2013-03-13 16:05:15