[英]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.