将枚举 ArrayList 方法转换为 Java 中的 T[]



我正在尝试使以下代码工作,没有警告或错误。问题是,如果我保留类型泛型,它会在 eclipse 中返回警告。当我去思考删除警告的代码时,我使用了显式类,遇到了Architecture.getValues()必须返回Architecture[]并且我似乎无法转换它的问题。我读到如果我将一个空Architecture[]传递给集合方法(.toArray()),它会填充它,但我似乎无法正确执行此操作,由于java.lang.NullPointerException异常,我在注释行上收到运行时错误。我该怎么做?

主.java

//snippet
private JComboBox<Architecture> comboBox_3;
//snippet
comboBox_3.setModel(new DefaultComboBoxModel<Architecture>(Architecture.getValues(perf)));

Architecture.Java

public enum Architecture {
    CATEGORYb, CATEGORY1, CATEGORY2, CATEGORY3, CATEGORY4;
    public static Architecture[] getValues(Performance perf) {
        ArrayList<Architecture> categories = new ArrayList<Architecture>();
        Architecture[] empty = null;
        switch (perf) {
            case PLa:
                categories.add(CATEGORYb);
                categories.add(CATEGORY2);
                break;
            case PLb:
                categories.add(CATEGORYb);
                categories.add(CATEGORY2);
                categories.add(CATEGORY3);
                break;
            case PLc:
                categories.add(CATEGORY1);
                categories.add(CATEGORY2);
                categories.add(CATEGORY3);
                break;
            case PLd:
                categories.add(CATEGORY2);
                categories.add(CATEGORY3);
                break;
            case PLe:
                categories.add(CATEGORY4);
                break;
        }
        return categories.toArray(empty); //runtime error
    }
}

性能.java

public enum Performance {
    PLa, PLb, PLc, PLd, PLe;
}
传入

数组不仅仅是提供类型。 如果它足够大,那么该数组将被填充并返回。 如果它不够大,则将分配、填充和返回相同类型的新数组。 因为它是null,所以抛出NullPointerException。 此行为在 Javadocs toArray中描述:

如果列表适合指定的数组,则在其中返回该列表。否则,将分配一个具有指定数组的运行时类型和此列表大小的新数组。

NullPointerException - 如果指定的数组为空

与其传递null数组,不如初始化一个数组,长度为列表的大小。

return categories.toArray(new Architecture[categories.size()]);

最新更新