【发布时间】:2016-05-11 00:16:17
【问题描述】:
我想对一些错误代码进行建模。经典的枚举方法
public enum FileError implement FormattedError {
_10 ("some error with parameters [{0}] and [{1}]"),
_20 ("some other error");
private final String description;
private Error(String description) {
this.description = description;
}
public String getDescription(Object... parameters) {
return // logic to format message
}
...
}
这对我不好,因为我有很多模块,每个模块都有错误代码,我不想在所有这些枚举中复制和粘贴样板文件(构造函数、getter、逻辑..)。
所以我选择了一个像这样实现的“手动”枚举
public class FileError extends BaseError {
public final static FileError _10 = new FileError (10, "some message with parameters [{0}] and [{1}]");
public final static FileError _20 = new FileError (20, "some other message");
}
我可以在 BaseError 中定义我的逻辑并重用它。
但它仍然很糟糕,因为没有办法将变量名链接到数字(_10 到 10),而且人们复制粘贴可能会在不注意的情况下重复使用相同的数字。我可以添加一个测试来通过反射来检查它,但是我如何强制人们使用该测试来实现他们的实现。
那么你们对我如何实现这一点有更好的想法吗?
[edit] 请记住,我不想将错误代码放在属性文件中,因为我希望 ide 将代码中的错误代码与其消息链接。
【问题讨论】:
-
集成测试应该验证没有数字被重用,最好是这些测试应该在单元测试之后直接运行,这样测试就可以使用
BaseError.class.getSubClasses()快速获取所有子类型。
标签: java enums error-code