java - 设计枚举通用行为

标签 java inheritance enums

我今天的问题是:

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

  • 我有一个将这些 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/

相关文章:

java - hadoop 中多种输入格式作为单一输入格式

java - 变量声明

java - xsl 中枚举的值

java - 将枚举声明为常量?

java - 从http请求参数构造实例的最佳方法

java控制台输出成为下一个控制台输入

c++ - 从继承类调用匹配方法

c++ - 在基类构造函数中使用 `this` 是否有效?

Java 枚举、静态类变量——为什么我不能这样做?

java - 帮助器,以便将非空属性从对象复制到另一个