好吧,我今天的问题是:
-
我有一个带有文件头的枚举。
-
我有一个将这些标题导出为字符串的函数
运行多个项目,我想让它在我们的私有库中使用非常通用。
当前功能:
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();
}
}