我試圖具有延伸的通用接口枚舉的集合,所以像:Enum <?擴展接口>
interface Fooable
{
void someCommonMethod();
}
enum E1 implements Fooable
{
// some enumuerations and a definition for someCommonMethod()
}
enum E2 implements Fooable
{
// some different enumerations and a different definition for someCommonMethod()
}
,然後利用這個別處通過強制執行這兩個,一個變量是一個枚舉和實現接口。因此沿線的東西..
bar(Enum<? extends Fooable> fe)
{
fe.ordinal();
fe.someCommonMethod();
}
然而,到目前爲止,我似乎有投FE爲了把它當作實現接口,即
bar(Enum<? extends Fooable> fe)
{
fe.ordinal();
((Fooable)fe).someCommonMethod();
}
,雖然這應該是安全......這似乎並不理想,我可能會忽視某些事情。當然,如果我嘗試將參數作爲Fooable傳遞,那麼我會拋出它將其視爲Enum,不僅如此,我現在還不安全。如下圖:
bar(Fooable fe)
{
// potentially unsafe cast!
((Enum<?>)fe).ordinal();
fe.someCommonMethod();
}
有什麼我俯瞰或者是
Enum<? extends Fooable>
約接近一個「好」的解決方案,我會得到什麼?
我對Java相對比較陌生,並且還在追趕自己,試圖像C或C++一樣使用它,所以如果我把它當作一把錘子而不是鋸子或者忽略某種東西,可以隨意指出它:)
我想過這件事,但我對它的行爲有所保留,值(),可能值得重新審視,因爲現在我無法疏通有效的保留... – Khanmots 2012-08-10 22:29:03
這需要一個不必要的接口。 – 2012-08-10 22:55:58
@Mike,我越想越想越是正確的道路。我的要求並不是真的,類型**是一個枚舉,而是它具有枚舉的**行爲**。我也相信自己價值()的東西不會是一個問題,並且我是愚蠢的。 – Khanmots 2012-08-10 22:59:02