设计枚举泛型行为



好吧,我今天的问题是:

  • 我有一个带有文件头的枚举。

  • 我有一个将这些标题导出为字符串的函数

运行多个项目,我想让它在我们的私有库中使用非常通用。

当前功能:

private static String getHeaders() {
StringBuilder sb = new StringBuilder();
for(HeadersEnum header : HeadersEnum.values()){
sb.append(header.getExportLib());
}
return sb.toString();
}

目标类似:

private static String getHeaders(ExportableCSV<Enum<T>> data) {
StringBuilder sb = new StringBuilder();
for( ExportableCSV<Enum> header : data.values()){
sb.append(header.getExportLib());
}
return sb.toString();
}

我知道我们不能用Enum进行继承,所以我创建了一个接口"可导出CSV":

public interface ExportableCSV<T extends Enum<T>> {
public static final String exportLib = "";
public static String getExportLib() {
return exportLib;
}
}

这是非常基本的,但在我看来,任何实现这个可导出CSV的枚举都应该可以访问我的exportLib((函数

public enum HeadersEnum implements ExportableCSV<HeadersEnum>{
foo("foo;"),
bar("bar;");

private String exportLib;

当然,我的通用函数目标方法不是编译,我也没有真正理解我能做什么和不能做什么。

一个简单的选择是让所有相关Enum实现导出协议

interface Exportable { String getExportLib(); }

另一种选择:如果你想要一个使用values的静态方法,你可以执行以下操作:

class EnumUtil {
public static <T extends Enum<T>> String getExportLib(T[] aValues){
StringBuilder sb = new StringBuilder();
for( T t : aValues){
//todo 
}
return sb.toString();
}
}

最新更新