需要使其完全动态,灵活地接受所有类型的数据

时间:2017-12-23 09:18:47

标签: java excel enums

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.awzpact.cm.util;

/**
 *
 * @author zia.khan
 */


interface Named {
    public String getName();
}

// Super class of all Tables.
 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)) {
                System.out.println(e.getName());
                return e;
            }
        }
        return null;
    }
}

// Extend Table and tell it about your enum using the super constructor.
 class TableContent1 extends Table<TableContent1.Nit> {

    public TableContent1() {
        super(TableContent1.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;
        }

    }
}



public class Test {
    public static void main(String[] args) {
        Table t=new TableContent1();
        System.out.println("File Name"+" "+ TableContent1.Nit.THEAD.getName());
        System.out.println("File Name"+" "+ TableContent1.Nit.FILENAME.getName());
        System.out.println("File Name"+" "+ TableContent1.Nit.FEE.getName());
        System.out.println("File Name"+" "+ TableContent1.Nit.SDAMOUNT.getName());
        System.out.println("File Name"+" "+ TableContent1.Nit.STATUS.getName());
        System.out.println("File Name"+" "+ TableContent1.Nit.TENDERSPECNO.getName());
    }
}

我正在努力开发一个实用程序,我们只需在其内部类中声明ENUMS,然后我们就可以获取相应的值,这些值将被设置为excel文件中的列标题。 请查看代码 我们有一个方法,它对于类中的所有枚举都是通用的。 我们只需要声明和ENUM各自的常量及其对应的值,现在这些值是可扩展的,可以根据需要增加和减少。

现在问题是,abpve代码仅适用于ENUM常量的单个值,如果我们尝试在ENUM常量中追加一个或多个参数,它将无法处理

例如:FEE(&#34; TENDER FEE&#34;) 但是,如果,FEE(&#34; TENDER FEE&#34;,&#34; WORKORDER FEE&#34;) 那它就行不通了。

所以我需要一个解决方案,在ENUM常量中需要n个参数。 所以,伙计们给我建议并分享你的知识。

目标: 1.方法可以接受所有类型的数据。 2.枚举常量可以取任意类型的n个值。

1 个答案:

答案 0 :(得分:0)

您是否尝试在枚举中使用var.args?

E.g。

new Customer {customerID=311111111, firstName= "Lior", lastName="David", phone="0549121111", carNumber=57382561, mailCustomer="Liorda@gmail.com", homeAddress="bograshov 22", workAddress="bograshov 18"}, 

当然,您也需要更改界面,并调整其余代码