java - 使用特定枚举类的父类(super class)型参数

标签 java enums

我有两个解析器类,我想在解析失败时抛出异常。 我想使用相同的异常 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/

相关文章:

java - 有多少个线程可以并行运行?

java - 程序类型已存在错误

c++ - 抽象 C++ 枚举以减少编译

Java - JPanel 包含点方法错误

Java 准备好的语句不完全工作 - MYSQL

java - MultipartEntityBuilder 不发送任何 Post 变量

Swift - 枚举返回错误的值类型

变量的java枚举访问问题

c# - 如何使用代码映射在 NHibernate 中映射 Enum

c# - 为什么负枚举成员最后被 foreach 枚举?