Java 接口和 RuntimeExceptions 的模式
Java pattern for interfaces and RuntimeExceptions
我在我的项目中使用了以下模式。
public interface Foo {
// When given a positive number, double it
public Integer doublePositiveNumber(int number);
}
public class FooImpl {
public Integer doublePositiveNumber(int number) {
if (number < 0) {
throw new IllegalArgumentException("number must be positive")
}
return number * 2;
}
}
关于这个设计,有一个主要问题一直困扰着我。使用此接口实现的任何人都不清楚他们可能需要处理 IllegalArgumentException。同样,如果传入负数,我希望此接口的其他实现抛出此异常。
我想过几种解决方法:
1) 什么都不做,这个模式很好很正常
2) 改为抛出自定义检查异常。这感觉很尴尬,因为 IllegalArgumentException 非常适合这个错误。
3) 在方法签名中添加"throws IllegalArgumentException"。我在我的项目中使用的 java 代码质量扫描器声称在签名中抛出 RuntimeException 是一种代码味道,应该避免。
我希望有人可以阐明我想要做的事情是否有好的模式。我不知道我是过度设计还是正确地考虑了这种情况。
我会创建您自己的已检查异常 - 类似于 "NegativeNumberException",因为它描述了导致此错误的原因。
RuntimeError
像 IllegalArgumentException
通常是为了在程序员错误的情况下抛出 - 如果您希望它被捕获,那么您应该使用已检查的。
您始终可以添加带有 @throws
注释的 Javadoc 连接,但根据您的描述,当调用者无法处理异常时让编译器停止运行会更好。
我在我的项目中使用了以下模式。
public interface Foo {
// When given a positive number, double it
public Integer doublePositiveNumber(int number);
}
public class FooImpl {
public Integer doublePositiveNumber(int number) {
if (number < 0) {
throw new IllegalArgumentException("number must be positive")
}
return number * 2;
}
}
关于这个设计,有一个主要问题一直困扰着我。使用此接口实现的任何人都不清楚他们可能需要处理 IllegalArgumentException。同样,如果传入负数,我希望此接口的其他实现抛出此异常。
我想过几种解决方法:
1) 什么都不做,这个模式很好很正常
2) 改为抛出自定义检查异常。这感觉很尴尬,因为 IllegalArgumentException 非常适合这个错误。
3) 在方法签名中添加"throws IllegalArgumentException"。我在我的项目中使用的 java 代码质量扫描器声称在签名中抛出 RuntimeException 是一种代码味道,应该避免。
我希望有人可以阐明我想要做的事情是否有好的模式。我不知道我是过度设计还是正确地考虑了这种情况。
我会创建您自己的已检查异常 - 类似于 "NegativeNumberException",因为它描述了导致此错误的原因。
RuntimeError
像 IllegalArgumentException
通常是为了在程序员错误的情况下抛出 - 如果您希望它被捕获,那么您应该使用已检查的。
您始终可以添加带有 @throws
注释的 Javadoc 连接,但根据您的描述,当调用者无法处理异常时让编译器停止运行会更好。