我有一个有方法的类。该方法可能会失败,我想抛出异常。在函数抛出异常的类的命名空间中定义异常类是不是很糟糕?我还没有看到很多这方面的例子,但它似乎是“正确的”(即OO)方式吗?有没有理由我应该避免这种模式并在自己的文件中定义每个自定义异常?
public class Foo
{
void bar() {
// do something and throw BarException if something bad happens
}
public static class BarException extends Exception {
// rest of class definition
}
}
答案 0 :(得分:7)
我认为这取决于您创建的Exception
的可能范围。如果它只与Foo
和Foo
永远相关,那么将其创建为嵌套类就会很好。
请确保调用Bar
的内容有用:
catch (Foo.BarException e)
而不是
catch (BarException e)
否则,将其创建为自己的独立类。
对于命名空间,Java类可以用于命名空间类,但通常在Java包中用于命名空间类。如果主类和另一个类之间存在非常高的耦合,我只会使用嵌套类。
答案 1 :(得分:4)
我不会使用这种模式。
你为什么要这样做?只是,因为你不想创建一个新文件? ;)
在Java中,您应该只在一个文件中添加一个公共类。有时我将公共接口添加到类中,大多数用于事件处理。
class MyEvent {
public void registerHandler(MyEvent.Handler h){
//
}
public interface Handler(){
handle();
}
}
在这种情况下,我绝对肯定,不会有任何其他类使用此接口。