我有两个解析器类,我想在解析失败时抛出异常。 我想使用相同的异常 ParserException,我希望它可以接受导致失败的字段名称。我想使用枚举,但我认为我没有完全清楚这个主题。
如何在 ParserException 类中声明 fieldName? 据我了解,枚举应该是 ParserA.Fields 和 ParserB.Fields 的父类(super class)型,但不被接受。
请注意,两个枚举类包含一组不同的枚举,即它们不是同一类。
public class ParserA {
public enum Fields {
A_FIRST_FIELD
A_SECOND_FIELD
}
public void parse() {
...
throw ParserException(Fields.A_FIRST_FIELD);
}
}
public class ParserB {
public enum Fields {
B_FIRST_FIELD
B_SECOND_FIELD
}
public void parse() {
...
throw ParserException(Fields.B_FIRST_FIELD);
}
}
// Parser error
public class ParserException extends Exception {
enum fieldName; // ????? what goes here?
public ParserException(enum e) {
this.fieldName = e;
}
public enum getFieldName() { // ?????? how do I do something like this?
return fieldName;
}
}
最佳答案
那么,您可以拥有 ParserException
存储Enum<?>
,但这确实不会为您提供比仅使用 Object
任何真正的优势作为 ParserException
中字段的类型.
如果不改变您在这里所做的事情的设计,我的首选是制作一个名为 Field
的标记界面。并拥有您所有的 enum
表示字段的 s 实现了...然后 ParserException
可以使用Field
作为它存储的对象的类型。
public interface Field {
}
...
public enum Fields implements Field {
A_FIRST_FIELD,
A_SECOND_FIELD
}
...
public class ParserException extends Exception {
private final Field field;
public ParserException(Field field) {
this.field = field;
}
public Field getField() {
return field;
}
}
在大多数情况下,该东西是 enum
应该是一个无需关心其他任何内容的实现细节。
关于java - 使用特定枚举类的父类(super class)型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4831899/