2013-03-13 26 views
2

我想抛出一个具有特定名称的异常,并且这种异常已经存在于双面打包中。从双面软件包中抛出异常是否正确?

E.g. UnexpectedException in java.rmi。我没有使用rmi packege的任何设施,但是例外的名称是,正好是我需要的

我可以在我自己的上下文中抛出异常,或创建一个具有相同名称的新异常。哪种方法更好?

+0

用相同的名称创建并使用它。 – 2013-03-13 16:05:15

回答

5

仅仅因为名称是正确的并不意味着其他任何东西。看的说明中,例如:如果一个远程方法调用的客户端接收,

的UnexpectedException抛出作为呼叫,检查异常不是在抛出声明的经检查异常类型中的结果远程接口中方法的子句。

这是否实际上描述你的例外试图代表什么?我怀疑不是。假设你是一个客户端 - 你会想知道为什么地球上你不得不赶上(或声明)与RMI有关,尽管你的代码库没有与RMI相关。奇怪的是会在整个代码中传播。伊克。

2

当您查看例外的完全限定名称时,java.rmi是其名称的一部分。考虑一个程序员使用你的代码阅读来期待java.rmi的异常,这可能会引起一阵眉毛,因此是一个坏主意。

考虑到这个例外,特别是:是什么意外?您可以改为命名您的班级UnexpectedSomethingException,使其更清楚地发生了什么。

1

@Jon Skeet@akaIDIOT已经提供了相当不错的答案。我只会添加几个与您的问题相关的示例:

这将是奇怪和困惑从拥有无关,与RMI方法处理java.rmi.UnexpectedException

另请注意,例外的主要目的是允许客户端代码处理您无法处理的情况。因此,方法抛出java.io.IOException的事实意味着客户端代码应负责处理意外的文件输入 - 输出错误(重新检查文件访问/存在,基本设置)。投掷方法java.rmi.UnexpectedException给客户端代码提示以检查RMI设置

+0

我已经更新了我的答案,谢谢。我很高兴我没有用逗号代替'和'。这将是尴尬。 – 2013-03-13 16:08:39

0

我强烈建议不要重复使用另一个异常,因为它只是基于它共享所需名称的事实。例如,在RMI的上下文之外抛出一个java.rmi.UnexpectedException将会非常令人困惑。

我不确定你打算如何使用你的异常,但对我来说,完全基于名字,听起来像你可以使用java.lang.RuntimeException,因为它具有相同的一般含义。

所以,我的建议是按以下顺序:

  1. 使用RuntimeException的,如果它确实是一个意想不到的预期异常,你的代码是不准备处理。如果您确实不需要比RuntimeException已经提供的任何新功能,这是最合适的。
  2. 创建您自己的自定义UnexpectedException类。真的没有理由严格避免仅仅因为其他库已经使用某个类名而使用它。这是包的一个要点 - 提供一个命名空间来消除相同名称的歧义。用现代的IDE,真的没有理由关心。其他人可能会不同意 - 这是一个口味的问题 - 但我个人并没有看到它的问题。当然没有技术理由不这样做。
相关问题