[英]How can I wrap a Java enum and still iterate over it?
我怎么能有一個抽象枚舉,或某種基本枚舉?
在我的通用代碼中,我想要一個枚舉占位符MyRetems的概念,而不是將自己與具體的枚舉聯系起來。 然后在我的每個項目中,我都會有一個具體的實現。
例如共同代碼
public interface MyItems {
// Marker interface
}
項目A.
public enum Items implements MyItems {
RED_CAR, BLUE_CAR, GREEN_CAR;
}
項目B.
public enum Items implements MyItems {
BROWN_TREE, GREEN_TREE;
}
這似乎有效,但在我的公共代碼中,我不能在我的接口枚舉上寫一個循環,因為它不是枚舉。 在我的常用代碼中,我想寫
for (MyItems item : MyItems.values())
doSomething(item);
但我不能,因為我的界面只是一個標記界面,它沒有.values()。
任何建議都非常感謝。 我不知道我是否完全以錯誤的方式嘗試。
這樣做真的沒有意義 - 因為values()
方法是靜態的 。 要調用它,您需要知道要調用它的類型。
你最接近的將是:
public interface MyItemsFactory<T extends MyItems>
{
Iterable<T> values();
}
然后以某種通用的方式實現它,例如
public class EnumFactory<T extends Enum<T> & MyItems>
implements MyItemsFactory<T>
{
private final Class<T> clazz;
public EnumFactory(Class<T> clazz)
{
this.clazz = clazz;
}
public Iterable<T> values()
{
return EnumSet.allOf(clazz);
}
}
但基本規則是多態和靜態方法不混合。 在你的電話中:
for(MyItems item : MyItems.values())
doSomething(item);
你期望它迭代的MyItems
哪個實現? 您可以擁有實現MyItems
大量類型。
您可以考慮使用Type Safe Enum Pattern替換枚舉,這將允許您使用values()方法實現接口,該方法返回特定實現的所有值。
獲取類並使用Class.getEnumConstants()從中挖掘值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.