Java 如何在不复制粘贴代码的情况下复制枚举?
我制作enum是为了帮助阅读和处理带有组件的产品的excel导入 我目前做了以下两个枚举Java 如何在不复制粘贴代码的情况下复制枚举?,java,enums,Java,Enums,我制作enum是为了帮助阅读和处理带有组件的产品的excel导入 我目前做了以下两个枚举 public enum ProductSheetColumns{ 产品标识(“产品标识”、“A”), 产品名称(“产品名称”、“B”), 成本(“成本”、“C”); 私有字符串列名; 私有字符串列索引; ProductSheetColumns(字符串columnName、字符串columnIndex){ this.columnName=columnName; this.columnIndex=columnI
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
用例。例如,在开关
语句中,不能使用上面的语句代替枚举
。如果您需要realenum
类,复制和粘贴是唯一的解决方案。这里有两个不同的枚举。这就需要两种不同的类型。在我看来,值的数量似乎是一致的。枚举的数量是一致的,当然,但构造函数中指定的数据(列名和列索引)对于这两个以及声明用于解析excel文件的任何其他枚举都是相同的。