2014-01-10 71 views
0

我创建了一个接口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); 
} 
+1

你传递'ColumnsReportname'到'Columns []'或'ColumsnReportname []'?如果你向我们展示一些代码会更好。 –

+0

你能告诉我们一些代码吗? – arshajii

+0

已添加示例。 –

回答

1

createHeader(Columns[])不接受ColumnsReportname参数,因为一个Columnsreportname参数不是列实例的阵列。

可以更改位createHeader方法的签名,并使它通用:

public <T extends Columns> void createHeader(T ... params) 

这将允许你通过的Columns子类(如ColumnsReportname)可选号码。

+0

正是我在找什么,谢谢。我需要重新审视我的仿制药。 –

0

使用标头名称的List

如果您尝试将子集与子类型结合使用,那么数组可能会让您陷入困境。见乔希布洛赫的有效的Java:第2版,第25条,( “首选名单阵列”)和这个例子从它:

// 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");