我想在所有枚举中使用CLASS的通用方法

public class TableContent { public static String EXCEL_SHEET_NAME = Nit.THEAD.getName(); public static String FILENAME= Nit.FILENAME.getName(); public enum Nit { FILENAME("Nit-workorder-list"), THEAD("NIT WORKORDER"), TENDERSPECNO("TENDER SPECFICATION NO."), FEE("TENDER FEE"), SDAMOUNT("SD AMOUNT"), TYPE("NIT TYPE"), PRE_BID("PRE BIDDING DATE"), OPEN_DATE("OPENING DATE"), STATUS("CONTRACTOR STATUS"); private final String name; public String getName() { return name; } private Nit(String name) { this.name = name; } public static Nit getNitHeadByName(String name) { Nit[] nit=Nit.values(); if(nit==null) { return null; } for(Nit nitHead:nit) { if(nitHead.getName().equals(name)) return nitHead; } return null; } public enum NitWorkOrder { } public enum NitList { } 

我的目标是:我想从我的应用程序中导出excel表格,每次我需要对表格标题进行硬编码时,这不是很好的编程实践。

所以我使用enum来克服硬编码的问题。 现在根据列表有不同的表格标题,然后我将所有需要的ENUMS放在单个类中。

我曾经写getXXXByName()getXXXByValue()来通过名称或值来访问枚举。

但他的问题是我需要在每个枚举中每次写getXXXByName()getXXXByValue() 。 我想在类和枚举之外写这些方法,并在类名的帮助下访问这些方法。

我只想在枚举中声明我的常量。

请给我一个想法或者一个方法,这样我可以使这个方法是通用的,将为每一个枚举工作。 我想以这样的方式编写这些方法,以便可以访问我所在类中的所有枚举。 我想过仿制药,但我知之甚less。

通过告诉父类该types是一个实现接口的enum ,可以使用generics将function推送到父类。

 // Use an interface to inform the super class what the enums can do. public interface Named { public String getName(); } // Super class of all Tables. public static class Table<E extends Enum<E> & Named> { private final Class<E> itsClass; private final String sheetName; private final String fileName; public Table(Class<E> itsClass) { this.itsClass = itsClass; // Walk the enum to get filename and sheet name. String sheetName = null; String fileName = null; for ( E e: itsClass.getEnumConstants() ){ if ( e.name().equals("FILENAME")) { fileName = e.getName(); } if ( e.name().equals("THEAD")) { sheetName = e.getName(); } } this.sheetName = sheetName; this.fileName = fileName; } // Use the interface and the enum details to do your stuff. public E getByName (String name) { for ( E e: itsClass.getEnumConstants() ){ if ( e.getName().equals(name)) { return e; } } return null; } } // Extend Table and tell it about your enum using the super constructor. public static class TableContent extends Table<TableContent.Nit> { public TableContent() { super(TableContent.Nit.class); } public enum Nit implements Named{ FILENAME("Nit-workorder-list"), THEAD("NIT WORKORDER"), TENDERSPECNO("TENDER SPECFICATION NO."), FEE("TENDER FEE"), SDAMOUNT("SD AMOUNT"), TYPE("NIT TYPE"), PRE_BID("PRE BIDDING DATE"), OPEN_DATE("OPENING DATE"), STATUS("CONTRACTOR STATUS"); private final String name; Nit(String name) { this.name = name; } public String getName() { return name; } } }