Java 如何在同一类中创建n个异常?

Java 如何在同一类中创建n个异常?,java,exception,inheritance,custom-exceptions,Java,Exception,Inheritance,Custom Exceptions,好的,这是我的问题 我想创建自己的自定义异常,如“UsernameAreadyTakeNexception”。我可以在扩展异常的文件中创建单个类。我的问题是,我不希望每个“子类”有3-5个几乎什么都不做的不同文件。我想把它们都放在同一个文件里。这是可能的吗?如果可能的话,你可以通过创建一个静态子类来实现这一点,尽管我不推荐这样做。下面是一个例子: package com.sandbox; public class Sandbox { public static void main(St

好的,这是我的问题


我想创建自己的自定义异常,如“UsernameAreadyTakeNexception”。我可以在扩展异常的文件中创建单个类。我的问题是,我不希望每个“子类”有3-5个几乎什么都不做的不同文件。我想把它们都放在同一个文件里。这是可能的吗?如果可能的话,你可以通过创建一个静态子类来实现这一点,尽管我不推荐这样做。下面是一个例子:

package com.sandbox;

public class Sandbox {
    public static void main(String[] args) throws Exception2 {
        throw new Exception2();
    }

    public static class Exception1 extends Exception {

    }

    public static class Exception2 extends Exception {

    }

    public static class Exception3 extends Exception {

    }


}

编译Java时,在同一文件中放置多个类的唯一限制是,文件中只有一个顶级类可以标记为public。这是因为公共类必须位于具有相同名称的文件中,并且不能有多个具有相同名称的类

这通常被认为是一种糟糕的做法,它不能保证您的类具有正确的保护级别,但您可以在声明其他类时不使用public。这将为它们提供默认保护

有关默认保护的含义和其他保护级别的详细讨论,请参见问题

因此,您可以创建文件usernameareadyTakenexception.java并将其放入如下内容:

public class UsernameAlreadyTakenException extends Exception {
    ...
}
class MySecondException extends Exception {
    ...
}
...
class MyNthException extends Exception {
    ...
}

您甚至可以将文件命名为其他名称,但不能将类UsernameAreadyTakeNexception标记为public。但再一次,它是这样做的。通常最好为每个不同的类创建一个新文件。

虽然我忘记了@Sam提出的规则,但我在这里所说的并没有错,可能是一个解决方案,所以我不明白为什么它会被否决。我同意,你的解决方案是完全有效的,这样可以更好地控制访问级别必须为每个异常类型创建3-5个单独的文件。在Java程序中,每个文件有一个类是正常的,公共类是必需的。与其仅仅因为你想把它们放在一个文件中而尝试做一些特殊的技巧,不如克服它。你为什么不想要3-5个不同的文件呢?我不想要多个文件,因为这看起来像是浪费。每个类只包含一个构造函数。