将枚举(实现相同的接口)添加到集合会引发ClassCastException

时间:2015-12-30 13:45:16

标签: java interface enums polymorphism classcastexception

我已经创建了一个接口Attribute,由不同的枚举实现(因为我知道Java-enum实际上是一个类)代表一个属性:

界面Attribute

public interface Attribute {
    void print();
}

然后我使用Size行为制作了两个枚举:TypeAttribute

枚举Size

public enum Size implements Attribute {
    SMALL, MEDIUM, LARGE;

    @Override
    public void print() {
        System.out.println("I am a size.");
    }
}

枚举Type

public enum Type implements Attribute {
    SQUARE, CIRCLE, TRIANGLE;

    @Override
    public void print() {
        System.out.println("I am a type.");
    }
}

然后我在我的主类中测试结构:

public class AttributesTestDrive {
    public static void main(String[] args) {
        Set<Attribute> attributes = new TreeSet<>();
        attributes.add(Size.MEDIUM);
        attributes.add(Type.CIRCLE);
        for (Attribute attribute : attributes) {
            attribute.print();
        }
    }
}

任何人都可以解释为什么我得到java.lang.ClassCastException以及如何摆脱这个:

异常详情:

at java.lang.Enum.compareTo(Enum.java:180)
at java.lang.Enum.compareTo(Enum.java:55)
at java.util.TreeMap.put(TreeMap.java:568)
at java.util.TreeSet.add(TreeSet.java:255)

1 个答案:

答案 0 :(得分:2)

尝试使用HashSet而不是TreeSet