gpt4 book ai didi

Java 泛型 : convoluted template definition

转载 作者:行者123 更新时间:2023-11-30 11:59:04 24 4
gpt4 key购买 nike

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

它基本上归结为一个相互关联的类和接口(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com