Java 在方法中定义的本地类是否应该作为异常抛出?

Java 在方法中定义的本地类是否应该作为异常抛出?,java,exception,exception-handling,Java,Exception,Exception Handling,可以将函数本地类作为异常抛出。这是好是坏 我的意图是解释异常类类型上的异常上下文 class A { void method1() throws IOException { class Method1IOException extends IOException { } throw new Method1IOException(); } void method2() throws IOException{

可以将函数本地类作为异常抛出。这是好是坏

我的意图是解释异常类类型上的异常上下文

class A {
    void method1() throws IOException {
        class Method1IOException extends IOException {
        }
        throw new Method1IOException();
    }

    void method2() throws IOException{
        class Method2IOException extends IOException{
        }
        throw new Method2IOException();
    }
}

假设
extends
是方法声明中
throws
的输入错误

您不能在该范围内抛出一个
异常
未知,它将是您的方法的本地范围(在本例中,与类
A
的实例相比)

因此,您的本地
异常
s extend
运行时异常
,或者您的
throws
子句必须抛出常规
异常
(或者
Throwable

无论如何,我不推荐这种做法,除非您从未重新使用本地
异常
——即使这样


上下文应该在消息中以编程方式表示,并在堆栈跟踪中自动表示,但在这种情况下,它只会给堆栈跟踪添加一些噪声

你为什么不自己试试呢?我完全不明白你的意思。如果你想扔东西,它必须延伸。方法不是对象,因此不能抛出它们,如果这是您要问的。@Turing85:看看代码-OP是在方法中声明异常类,并声明该方法可以抛出该异常。这一切都很好。@JonSkeet啊,好吧,在再次阅读标题后,我明白了。标题有点让人困惑。如果调用方能够捕捉到您的特定类型的异常,从而区分您的方法具有预期类型的IOException的场景和出现意外类型的IOException的场景,那么这种方法可能会很有用;不过,要想让它起作用,我认为您的例外类型需要是公开的,不是吗?我还建议,尽管嵌套异常类型可能有意义,但它们应该是
静态的
。否则,异常类型将包含对其方法引发异常的对象的隐藏引用;如果这个参考是有用的,这是一件不错的事情,但如果它不是,那就值得怀疑。