我今天的问题是:
我有一个带有文件头的枚举。
我有一个将这些 header 导出为字符串的函数
运行多个项目我想让它非常通用,以便在我们的私有(private)库中使用。
当前功能:
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 进行继承,因此我创建了一个接口(interface)“ExportableCSV”:
public interface ExportableCSV<T extends Enum<T>> {
public static final String exportLib = "";
public static String getExportLib() {
return exportLib;
}
}
这是非常基本的,但在我看来,任何实现此 ExportableCSV 的枚举都应该有权访问我的 exportLib() 函数。
public enum HeadersEnum implements ExportableCSV<HeadersEnum>{
foo("foo;"),
bar("bar;");
private String exportLib;
当然,我的泛型函数的目标方法不是编译,而且我并没有真正理解我能做什么和不能做什么。
最佳答案
一个简单的选择是让所有相关的Enum
实现导出接口(interface)
interface Exportable { String getExportLib(); }
另一个选项:如果您想要一个使用值
的静态方法,您可以执行以下操作:
class EnumUtil {
public static <T extends Enum<T>> String getExportLib(T[] aValues){
StringBuilder sb = new StringBuilder();
for( T t : aValues){
//todo
}
return sb.toString();
}
}
关于java - 设计枚举通用行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59265713/