有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java你能重铸一个枚举吗?

我已经创建了一个接口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) 个答案

  1. # 1 楼答案

    createHeader(Columns[])不接受ColumnsReportname参数,因为Columnsreportname参数不是列实例数组

    您可以稍微更改createHeader方法的签名并使其通用:

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

    这将允许您传递可选数量的Columns子类(比如ColumnsReportname