有没有办法在不添加 throws 声明的情况下抛出异常?

新手上路,请多包涵

我有以下情况。

我有一个 Java 类,它继承自另一个基类并覆盖了一个方法。基本方法不会抛出异常,因此没有 throws ... 声明。

现在我自己的方法应该能够抛出异常,但我可以选择

  • 吞下异常或
  • 添加抛出声明

两者都不令人满意,因为第一个会默默地忽略异常(好吧,我可以执行一些日志记录),第二个会因为不同的方法头而产生编译器错误。

 public class ChildClass extends BaseClass {

        @Override
        public void SomeMethod() {
            throw new Exception("Something went wrong");
        }
}

原文由 Jürgen Steinblock 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 607
2 个回答

如果你真的想的话,你可以抛出未经检查的异常而不必声明它们。未经检查的异常扩展 RuntimeException 。扩展 Error 的 Throwables 也未选中,但只能用于完全无法处理的问题(例如无效的字节码或内存不足)。

作为一个具体案例,Java 8 添加了 UncheckedIOException 用于包装和重新抛出 IOException

原文由 OrangeDog 发布,翻译遵循 CC BY-SA 4.0 许可协议

这是一个技巧:

 class Utils
{
    @SuppressWarnings("unchecked")
    private static <T extends Throwable> void throwException(Throwable exception, Object dummy) throws T
    {
        throw (T) exception;
    }

    public static void throwException(Throwable exception)
    {
        Utils.<RuntimeException>throwException(exception, null);
    }
}

public class Test
{
    public static void main(String[] args)
    {
        Utils.throwException(new Exception("This is an exception!"));
    }
}

原文由 Eng.Fouad 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题