Java 在不向声明中添加抛出的情况下重新抛出异常
有没有办法避免在Java的方法接口中声明“抛出”的需要 问题是:我有一个非常简单的方法,它抛出NPE。这很简单,我添加了所有可能的检查,坦率地说,我无法想象这是如何发生的,所以我想调查一下。我在日志中添加了try/catch(Throwable e),最后想要重新抛出Java 在不向声明中添加抛出的情况下重新抛出异常,java,try-catch,throws,Java,Try Catch,Throws,有没有办法避免在Java的方法接口中声明“抛出”的需要 问题是:我有一个非常简单的方法,它抛出NPE。这很简单,我添加了所有可能的检查,坦率地说,我无法想象这是如何发生的,所以我想调查一下。我在日志中添加了try/catch(Throwable e),最后想要重新抛出 这需要我添加“抛出”声明。但是这个方法是接口的实现,所以我还需要更新接口,然后更新所有其他实现,然后更新一些(可能很多)用法。真的没有办法避免吗?我现在要做的是在catch的末尾引起本机异常:通过访问null或除以0-这看起来太糟
这需要我添加“抛出”声明。但是这个方法是接口的实现,所以我还需要更新接口,然后更新所有其他实现,然后更新一些(可能很多)用法。真的没有办法避免吗?我现在要做的是在catch的末尾引起本机异常:通过访问null或除以0-这看起来太糟糕了 如果您不关心原始异常是否被保留,您可以抛出一个
RuntimeException
并将原始异常包装在其中<代码>运行时异常和派生异常未选中,不需要列出。如果需要保留原始异常,则必须调整throws
子句。此外,如果您只关心NPE,因为它是一个RuntimeException,您可以捕获NullPointerException,然后重新播放它。这将不需要更改方法签名。酷,这是有效的!对于我来说,这种行为相当奇怪,编译器“知道”应该以不同方式对待的继承的某些“特殊”分支。。。我是说,这就是为什么我没想到会这样。谢谢。编译器知道RuntimeException
和从它派生的任何内容都不需要在方法的throws
子句中声明。这些在Java中被称为“未检查的异常”。这种异常包装可能会导致纯粹主义者惊恐地尖叫,但它是解决Java检查异常问题的一种实用方法。不要捕获可丢弃的,因为它包括VirtualMachineError
,OutOfMemoryError
,和ThreadDeath
,您不希望捕获或尝试从中恢复。只需捕获异常
,或者在您的情况下更好地捕获运行时异常
@DavidConrad,您是对的。如果我抓住了特定的NPE,我就不会有这个问题。