gpt4 book ai didi

java - 我可以在 EJB 方法中抛出 AssertionError 吗?

转载 作者:行者123 更新时间:2023-12-01 11:55:51 26 4
gpt4 key购买 nike

遵循 Joshua Bloch 的《Effective Java》中使用的风格,并与 this 的答案一致问题,我过去曾在 Java SE 环境中使用 AssertionErrors 来处理永远不应该执行的代码路径。

看看 Java EE,EJB 3.1 规范说

If the bean method encounters a system exception or error, it should simply propagate the error from the bean method to the container (i.e., the bean method does not have to catch the exception).

再往下一点,它表示在非 ApplicationException 的情况下必须丢弃相关的 EJB 实例。据我所知,如果后续请求需要该 EJB 的另一个实例,容器会从池中获取一个实例,或者在必要时创建一个新实例,因此应该不会出现与此相关的问题(当然,如果它是@Singleton EJB)。

在 session bean 方法中使用 AssertionError 来指示编程错误是否合适/良好?或者是否有更合适的 Throwable 子类型?

最佳答案

我真的不认为抛出AssertionError有什么问题。容器应该能够执行回滚,就像处理任何未检查的异常一样。

话虽如此,我自己从不抛出 AssertionError 。我会抛出 RuntimeException 子类的几个常见示例(可能比 AssertionError 更合适)是:

假设我们有一个枚举:

public enum TestEnum {
TEST1, TEST2;
}

我想捕获默认情况,在此我抛出一个 IllegalArgumentException:

public class TestClass {

public void doSomethingWithTestEnum(TestEnum testEnum) {
switch (testEnum) {
case TEST1:
// do something here
break;
case TEST2:
// do something here
break;
default:
throw new IllegalArgumentException("Unknown enum type: " + testEnum);
}
}

}

另一个例子是参数验证:

public class TestClass {

private String testString;

public TestClass(String testString) {
this.testString = Objects.requireNonNull(testString);
}

}

这里,如果 testString 为 null,则抛出 NullPointerException

可能在某些情况下断言会更合适,但老实说我从未遇到过。

关于java - 我可以在 EJB 方法中抛出 AssertionError 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28450886/

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