6

我需要这样的东西:

public enum Enum {
    ENUM1<Class1>(Class1.class, "A DESCRIPTION", new Class1()),
    ENUM2<Class2>(Class2.class, "A DESCRIPTION", new Class2()),
    ENUM3<Class3>(Class3.class, "A DESCRIPTION", new Class3());

    private Enum(Class<? extends Object> clazz, String description, Object instance) {}
}

我需要的是:在一个地方定义所有 ClassX 的不同实例(它们扩展同一个 ClassSuper)。当然,我可以为每个 ClassX 定义不同的枚举,但这并不是我真正想要的。

4

3 回答 3

6

JLS 不允许枚举的类型参数:

EnumDeclaration:
    ClassModifiers(opt) enum Identifier Interfaces(opt) EnumBody

EnumBody:
    { EnumConstants(opt) ,(opt) EnumBodyDeclarations(opt) }
于 2012-08-24T16:17:02.060 回答
1

枚举实际上可以有字段,看起来这就是你想要的:

private Object instance;
private Enum(Class<? extends Object> clazz, String description, Object instance) {
    this.instance=instance;
}
public Object getInstance() {
    return instance;
}

据我所知,枚举不能被参数化,所以你不能在你的代码中使用它。但是,您到底想对这些课程做什么?我可能误解了你的问题

于 2012-08-24T16:08:35.523 回答
1

您可以编写以下内容来保存所有相同的信息(因为可以从类中获取类)

public enum Enum {
    ENUM1("A DESCRIPTION", new Class1()),
    ENUM2("A DESCRIPTION", new Class2()),
    ENUM3("A DESCRIPTION", new Class3());

    private Enum(String description, Object instance) {}
}

您会发现的问题是,使用枚举,泛型就没有那么有用了,您可以在没有泛型的情况下编写几乎相同的行为。

于 2012-08-24T16:23:29.327 回答