我想在CLASS中为所有枚举制作通用方法

时间:2017-10-31 06:50:53

标签: java excel enums

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()。我想在类中和枚举之外编写这些方法,并在类名的帮助下访问这些方法。

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

请建议我一个想法或方法,以便我可以使这种方法具有普遍性,这将适用于每一个枚举。我想以这样的方式编写这些方法,以便可以访问我的类中包含的所有枚举。我想到了仿制药,但我知之甚少。

1 个答案:

答案 0 :(得分:0)

通过告诉父类该类型是实现接口的enum,您可以使用泛型将功能推送到父类。

// 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;
        }

    }
}