gpt4 book ai didi

java - 我可以在单个类文件中在 java 中定义多个自定义异常并通过方法调用它们吗?

转载 作者:行者123 更新时间:2023-12-03 07:46:30 26 4
gpt4 key购买 nike

我正在尝试通过自定义异常进行异常处理。

我正在创建类 CustomExceptions 并扩展 Exception 如下:

public class CustomExceptions extends Exception{
public CustomExceptions (String s) {
super(s);
}

但是,不必为我想要的每个自定义异常创建多个文件,或者使我的主类文件膨胀,我想将所有自定义异常放在这个类中并通过一个方法调用它们

因此,假设我要处理两种情况:当用户尝试输入座位预订,但座位已被占用时,以及当用户尝试为年龄范围以外的人提供票时。

我可以在 CustomExceptions 类中创建 2 个方法来调用将自定义消息传递给它的构造函数吗?
    public void seatTaken(String s) {
String s = "The seat is taken, please choose a new one";
CustomExceptions(s);

}

public void notOldEnough(String s) {
String s = "User is not old enough for this movie.";
CustomExceptions(s)

}
}

这行得通吗?还是我被迫创建多个自定义异常文件?

最佳答案

一般自定义异常 应该 在顶层定义。因为,几乎普遍,这些异常(exception)是 部分界面包或模块。

如果用户看不到他们,他们怎么去捕获 他们分开?如果您不想单独捕获它们,那么为什么需要单独的类?

但是,如果必须,您可以将它们包含在需要它们的类中:

public class SeatReservationSystem {
public static class ReservationFailedException {
... constructors taking a message ...
}

public static class SeatTakenException extends ReservationFailedException {
... constructors taking a message ...
}

public static class OutsideAgeException extends ReservationFailedException {
... constructors taking a message ...
}

....
}

之后,您可以创建任何根据需要返回它们的方法。不要创建抛出它们的方法,因为编译器不会将它们视为您所在 block 的退出点,并且您会遇到奇怪的情况。

这是一些代码来说明我的意思:
// wrong
public static void throwRuntimeException() throws RuntimeException {
throw new RuntimeException();
}

// correct, but dangerous
public static RuntimeException createRuntimeException() {
return new RuntimeException();
}

public static void main(String[] args) {
String initializeMeOrThrowException;
if (new Random().nextBoolean()) {
// compiler doesn't recognize that the method always throws an exception
throwRuntimeException();

// this the compiler can understand, there is an explicit throw here:
// throw createRuntimeException();

// but this is the pitfall, it doesn't do anything:
// createRuntimeException();
} else {
initializeMeOrThrowException = "Initialized!";
}

// Compiler error for throwRuntimeException and createRuntimeException without throws:
// "The local variable initializeMeOrThrowException may not have been initialized"
System.out.println(initializeMeOrThrowException);
}

然而,经验告诉我,我忘记了 throws throw createException(...); 的声明方法,而愚蠢的编译器并没有警告我(即使没有它,该语句完全无用)。所以我尝试不使用任何一个。

请注意,我不确定您是否应该为此使用异常(exception)。如果您的系统是预订系统,那么拒绝门票并没有那么异常(exception)。返回 ReservationResult更有意义。

关于java - 我可以在单个类文件中在 java 中定义多个自定义异常并通过方法调用它们吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60200175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com