作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不确定以下内容是否足够复杂或过于复杂。
它基本上归结为一个相互关联的类和接口(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/
我是一名优秀的程序员,十分优秀!