我创建了一个接口Columns
,它由模式ColumnsReportname
的许多枚举扩展。界面中定义的方法之一是getHeaderText()
。
我还创建了一个方法createHeader(Columns[])
,理想情况下根据ColumnsReportname.values()
创建标题行。
除非它不起作用,因为createHeader(Columns[])
不接受ColumnsReportname
参数。
所以我可以只创建一个标题名称列表并传递它们,但是我需要或者是否有更简单的方法?
方法:
public void setHeader(Columns[] columns) {
List<Object> headers = new Vector<Object>();
for (Columns c : columns) {
headers.add(c.getHeaderText());
}
headerRow = new Row(headers, true);
}
枚举:
public enum ColumnsObligations implements Columns {
CLAIMNO(15, "Claim #", false), ACTIONDATE(10, "Action Dt.", false), DATEPAID(10, "Dt. Paid", false), ACTION(15, "Action"), CLAIMANT(
15, "Claimant"), FY(6, "FY", false), FUNDCITE(15, "Fund Cite"), AMTPAID(15, "Amt Paid", true), CHECKNO(15, "Ins. Dpt."), VOUCHERNO(
15, "Voucher No.");
private ColumnsObligations(int colWidth, String headerText, boolean totaled) {
this.colWidth = colWidth;
this.headerText = headerText;
this.totaled = totaled;
}
private ColumnsObligations(int colWidth, String headerText) {
this.colWidth = colWidth;
this.headerText = headerText;
this.totaled = false;
}
private final int colWidth;
private final String headerText;
private final boolean totaled;
public int getColWidth() {
return colWidth;
}
public String getHeaderText() {
return headerText;
}
public boolean isTotaled() {
return this.totaled;
}
谢谢。
编辑:解决方案
public <T extends Columns> void setHeader(T... columns) {
List<Object> headers = new Vector<Object>();
for (Columns c : columns) {
headers.add(c.getHeaderText());
}
headerRow = new Row(headers, true);
}
答案 0 :(得分:1)
createHeader(Columns[])
不接受ColumnsReportname
参数,因为Columnsreportname
参数不是列实例的数组。
您可以更改createHeader
方法的签名并使其成为通用:
public <T extends Columns> void createHeader(T ... params)
这将允许您传递可选数量的Columns
子类(如ColumnsReportname
)。
答案 1 :(得分:0)
使用标题名称的List
。
如果您尝试将集合与子类型配合使用,则数组可能会让您遇到麻烦。请参阅Josh Bloch的 Effective Java:2nd Edition ,第25项,(&#34;首选列表到数组&#34;)以及此示例:
// Fails at runtime!
Object[] objectArray = new Long[1];
objectArray[0] = "I don't fit in"; // Throws ArrayStoreException
对此:
// Won't compile!
List<Object> ol = new ArrayList<Long>(); // Incompatible types
ol.add("I don't fit in");