繁体   English   中英

在Java中将Enum ArrayList方法转换为T []

[英]Casting Enum ArrayList Method to a T[] in Java

我正在尝试使以下代码正常工作,而没有警告或错误。 问题是,如果我保留通用类型,它将在eclipse中返回警告。 当我想到删除警告的代码时,我使用了显式类,并遇到了一个问题,即Architecture.getValues()必须返回Architecture[]而我似乎无法进行强制转换。 我读到如果将空的Architecture[]传递给collections方法( .toArray() ),它将填充它,但似乎无法正确执行,由于java.lang.NullPointerException ,在注释行中出现运行时错误java.lang.NullPointerException异常。 我怎样才能做到这一点?

Main.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
    }
}

Performance.java

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

传入数组的作用不只是提供类型。 如果足够大,则该数组将被填充并返回。 如果不够大,则将分配,填充并返回相同类型的新数组。 因为它为null ,所以抛出NullPointerException toArray Javadocs中描述了此行为:

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

NullPointerException-如果指定的数组为null

不用传递null数组,而只是初始化一个数组,其长度为列表的大小。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM