2014-01-10 66 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");