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

问题描述 投票:0回答:1
/*
 * 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各自的常量及其对应的值,现在这些值是可扩展的,它可以根据需要增加和减少。

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

例如:FEE(“TENDER FEE”),但如果,FEE(“TENDER FEE”,“WORKORDER FEE”)那么它将无效。

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

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

java excel enums
1个回答
0
投票

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

EG

private final String[] names;

    Nit(String... name) {
        this.names = name;
    }

    public String[] getNames() {
        return names;
    }

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

© www.soinside.com 2019 - 2024. All rights reserved.