[英]Enum and generics in Java
我需要提供enum
和generic
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.