Java 如何在不复制粘贴代码的情况下复制枚举?

Java 如何在不复制粘贴代码的情况下复制枚举?,java,enums,Java,Enums,我制作enum是为了帮助阅读和处理带有组件的产品的excel导入 我目前做了以下两个枚举 public enum ProductSheetColumns{ 产品标识(“产品标识”、“A”), 产品名称(“产品名称”、“B”), 成本(“成本”、“C”); 私有字符串列名; 私有字符串列索引; ProductSheetColumns(字符串columnName、字符串columnIndex){ this.columnName=columnName; this.columnIndex=columnI

我制作enum是为了帮助阅读和处理带有组件的产品的excel导入

我目前做了以下两个枚举

public enum ProductSheetColumns{
产品标识(“产品标识”、“A”),
产品名称(“产品名称”、“B”),
成本(“成本”、“C”);
私有字符串列名;
私有字符串列索引;
ProductSheetColumns(字符串columnName、字符串columnIndex){
this.columnName=columnName;
this.columnIndex=columnIndex;
}
公共字符串sheetName(){
返回“产品表”;
}
公共字符串columnName(){
返回列名称;
}
公共字符串columnIndex(){
返回列索引;
}
}
公共枚举组件表列{
产品标识(“产品标识”、“A”),
组件ID(“组件ID”、“B”),
数量(“数量”、“C”);
私有字符串列名;
私有字符串列索引;
ComponentSheetColumns(字符串columnName、字符串columnIndex){
this.columnName=columnName;
this.columnIndex=columnIndex;
}
公共字符串sheetName(){
返回“组件表”;
}
公共字符串columnName(){
返回列名称;
}
公共字符串columnIndex(){
返回列索引;
}
}
正如您所看到的,除了常量和枚举名的命名之外,它们基本上都是相同的枚举

在保留方法的同时,有没有办法将代码简化成这样

public enum ProductSheetColumns{
产品标识(“临时产品标识”、“A”),
产品名称(“产品名称”、“B”),
额外成本(“额外成本”、“C”);
}
公共枚举组件表列{
产品标识(“产品标识”、“A”),
组件ID(“组件ID”、“B”),
数量(“数量”、“C”);
}
我曾尝试创建一个接口,但所做的只是让我不得不向enum类添加一个@Override标记。我似乎无法扩展类或继承枚举构造函数

编辑:为了澄清上面的代码示例,下面的代码不起作用,但我想知道是否可以对枚举执行相同的操作:

公共枚举ProductSheetColumns扩展ExcelSheetColumns{
产品标识(“临时产品标识”、“A”),
产品名称(“产品名称”、“B”),
额外成本(“额外成本”、“C”);
ProductSheetColumns(字符串columnName、字符串columnIndex){
超级(columnName、columnIndex);
}
公共字符串sheetName(){
返回“产品表”;
}
}
公共枚举组件SheetColumns扩展ExcelSheetColumns{
产品标识(“产品标识”、“A”),
组件ID(“组件ID”、“B”),
数量(“数量”、“C”);
ProductSheetColumns(字符串columnName、字符串columnIndex){
超级(columnName、columnIndex);
}
公共字符串sheetName(){
返回“组件表”;
}
}
公共枚举列{
;
私有字符串列名;
私有字符串列索引;
ExcelSheetColumns(字符串columnName、字符串columnIndex){
this.columnName=columnName;
this.columnIndex=columnIndex;
}
公共字符串columnName(){
返回列名称;
}
公共字符串columnIndex(){
返回列索引;
}
}

复制粘贴是不可避免的。
enum
不能扩展另一个类,接口也不能声明状态变量

或者,不要为此使用
enum
。声明自己的类枚举。您可以将它们建模为类似于单例模式的模式;e、 g

public abstract class EBase {
   // common state declarations
   // constructor
   // common methods
}

public class E1 extends EBase {
    public static final E1V1 = new E1(...);
    public static final E1V2 = new E1(...);
    ...
    // specific state variables
    // constructor
    // specific methods
}

这种方法并不适用于所有
enum
用例。例如,在
开关
语句中,不能使用上面的语句代替
枚举
。如果您需要real
enum
类,复制和粘贴是唯一的解决方案。

这里有两个不同的枚举。这就需要两种不同的类型。在我看来,值的数量似乎是一致的。枚举的数量是一致的,当然,但构造函数中指定的数据(列名和列索引)对于这两个以及声明用于解析excel文件的任何其他枚举都是相同的。