繁体   English   中英

Java中的枚举和泛型

[英]Enum and generics in Java

我需要提供enumgeneric s的某种设施。 由于枚举不能有类型参数 (它只是被语法禁止)并且实际上就像public static final成员一样,我倾向于写这样的东西:

public class GenericEnumLikeClass<T>{

    public static GenericEnumLikeClass<MyType> TYPE_INSTANCE;
    public static GenericEnumLikeClass<AnotherType> ANOTHER_INSTANCE;

    //other things
}

问题是我以前从未做过类似的事情,严格来说,不确定Java公约的正确性。 它是否会被视为奇怪的东西,或者当我们需要通过提供Type Paramters来扩展类似enum的行为时使用的通用技术?

这是在Java 1.5引入枚举之前使用的技术,因此它看起来并不奇怪。 旧的API有很多这些枚举式的类。 我建议将构造函数设为私有,并提供一个values()方法,该方法返回所有可用实例的数组。

同意@Ingo,你可以使用它作为构造函数并提供一个value()方法,就像:

public enum GenericEnumLikeClass { MyType("TYPE_INSTANCE"), AnotherType("ANOTHER_INSTANCE");

不知道你想要用你的'通用'论证做什么,但这可以给你一些想法:

编辑:由于你没有解释你如何使用这个通用参数,我无法给出真实的例子。 只需添加一些方法,来解释我的想法:

public enum MyGenericEnum {

    TYPE_INSTANCE(MyClass.class),
    ANOTHER_INSTANCE(AnotherClass.class);

    private Class<? extends SomeSuperClass> clazz;

    private MyGenericEnum(Class<? extends SomeSuperClass> clazz) {
        this.clazz = clazz;
    }

    public Class<? extends SomeSuperClass> getType() {
        return clazz;
    }

    @SuppressWarnings("unchecked")
    public <T extends SomeSuperClass> T getObject() {
        try {
            return (T) clazz.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }
}

暂无
暂无

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

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