Java:如何在枚举中的类类型字段上设置边界

时间:2014-06-03 22:56:42

标签: java generics enums

我有一个enum,它有一个属性是另一个类。我想在某处放置一个约束,即枚举的所有实例都应该具有扩展某个上限的属性的值,在本例中是一个接口。这是没有绑定的基本工作示例:

public enum MyClassRegistry
{
    MyClass(1,com.example.MyClass.class)

    private int typeId;
    private Class theClass;
}

接下来我要做的是:

public enum MyClassRegistry 
{
    MyClass(1,com.example.MyClass.class)

    private int typeId;
    private Class<T extends SomeInterface> theClass;
}

强制执行此字段的所有值都会扩展某个上限。这可能吗?如果是这样,这是什么语法?

2 个答案:

答案 0 :(得分:2)

public enum MyClassRegistry
{
    MyClass(1,com.example.MyClass);

    private int typeId;
    private Class<? extends SomeInterface> theClass;

    MyClassRegistry(int typeId, Class<? extends SomeInterface> theClass) {
        this.typeId = typeId;
        this.theClass = theClass;
    }
}

答案 1 :(得分:1)

enum类型不能声明任何泛型类型参数。

如果你的意思是你想要一个具有某种超类型的字段,例如一个接口,只需将该字段声明为具有该类型。

public enum MyClassRegistry
{
    First(1, new InterfaceFirstImpl()),
    Second(2, new InterfaceSecondImpl()) ;

    MyClassRegistry (int id, Interface value) {
        this.typeId = id;
        this.value = value;
    }
    private int typeId;
    private Interface value;
}