Java 泛型 : convoluted template definition

标签 java generics

我不确定以下内容是否足够复杂或过于复杂。

它基本上归结为一个相互关联的类和接口(interface)。 (见下文)建议表示赞赏....

/**
 * @param <T> item type
 * @param <TF> table format type
 */
interface EnumTableFormatItem<T, TF extends TableFormat<T>> {
    Object getValue(TF context, T item);
    String getLabel();
}

/**
 * @param <T> item type
 * @param <E> enum type which specifies each column
 */
static public class EnumTableFormat
    <
       T, 
       E extends Enum<E> 
                & EnumTableFormatItem<T, EnumTableFormat<T, E>>
    > implements TableFormat<T>
{
    final private List<E> fields = new ArrayList<E>();

    public EnumTableFormat(List<E> fieldList) { this.fields.addAll(fieldList); }

    @Override public int getColumnCount() { return this.fields.size(); }
    @Override public String getColumnName(int column) {
        return this.fields.get(column).getLabel();
    }                       
    @Override public Object getColumnValue(T item, int column) {
        return this.fields.get(column).getValue(this, item);
    }
}

编辑: 快速思考一下,它似乎过于复杂,我只是想为上下文使用一个对象,我认为我不应该将它与 EnumTableFormat 耦合。

(看我的回答)

最佳答案

这样的东西行得通吗?

/**
 * @param <T> item type
 */
interface EnumTableFormatItem<T> {
    Object getValue(TableFormat<T, ?> context, T item);
    String getLabel();
}

/**
 * @param <T> item type
 * @param <E> enum type which specifies each column
 */
static public class EnumTableFormat<T, E extends Enum<E> & EnumTableFormatItem<T>>
        implements TableFormat<T>
{
    final private List<E> fields = new ArrayList<E>();

    public EnumTableFormat(List<? extends E> fieldList) {
        this.fields.addAll(fieldList);
    }

    @Override public int getColumnCount() {
        return this.fields.size();
    }

    @Override public String getColumnName(int column) {
        return this.fields.get(column).getLabel();
    }

    @Override public Object getColumnValue(T item, int column) {
        return this.fields.get(column).getValue(this, item);
    }
}

关于Java 泛型 : convoluted template definition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2745088/

相关文章:

java - C++ 和 Java 中的 "generic"类型有什么区别?

java - 索引越界异常(堆栈)

java - 在集合末尾添加新行

java - 循环在网格上绘制一 block

java - 从 Eclipse 中的多个包导出多个 JAR

java - 通过Servlet提交表单

java - JSP:我正在做一个应用程序,我必须在其中下载ppt文件

java - Neo4j:正确地对 bolt 驱动器进行单元测试

Java、策略模式、泛型和返回类型

java - Java 迭代器返回的结果的泛型类型不兼容