gpt4 book ai didi

java - 我想在类中为所有枚举创建通用方法

转载 作者:太空宇宙 更新时间:2023-11-04 10:59:39 25 4
gpt4 key购买 nike

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来克服硬编码问题。现在根据列表有不同的表标题,然后我将所有必需的 ENUM 包含在单个类中。

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

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

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

请向我建议一个想法或方法,以便我可以使此方法通用,适用于每个枚举。我想以这样的方式编写这些方法,以便我的类中包含的所有枚举都可以访问它。我考虑过泛型,但我知之甚少。

最佳答案

您可以使用泛型将功能推送到父类,方法是告诉父类该类型是实现接口(interface)的枚举

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

}
}

关于java - 我想在类中为所有枚举创建通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47029423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com