我有一種情況,我從外部系統收到enum
,並且需要返回我們自己的enum
。這兩個枚舉具有完全相同的文字值在其中:在Java中使用instanceof枚舉
// externalEnum is guaranteed not to be null
public static MyEnum enumToEnum(final Enum<? extends Enum<?>> externalEnum)
{
if(externalEnum instanceof MyEnum)
{
return (MyEnum)enumType;
}
else
{
return MyEnum.valueOf(externalEnum.name());
}
}
然而,編譯器尖叫如下:
[javac] found : java.lang.Enum<capture#117 of ? extends java.lang.Enum<?>> [javac] required: myEnum [javac] if(externalEnum instanceof MyEnum)
我有一個版本的功能,通過簡單地返回MyEnum.valueOf(externalEnum.name())
作品 - 它的工作原理這就是最重要的。但是,我對編譯器錯誤感到困惑。
我想了解這種情況下泛型的具體化過程。的Enum<? extends Enum<?>>
或者乾脆Enum<?>
一個實例可以是MyEnum
(考慮到以後會不會比以前的亞型的任何其他。)
所以instanceof
測試應該工作,但似乎有什麼東西在一般定義Enum
(也許事實上Enums不能被擴展)導致編譯器使用該特定語句嘔吐。
解決方法對我來說很簡單,但我喜歡很好地理解這些問題,任何有關此問題的見解都將受到讚賞。
- Luis。
您的錯誤消息包含一個小寫的「myEnum」,但在代碼中的任何位置都看不到小寫的「myEnum」。代碼中定義的小寫「myEnum」在哪裏?這個功能在做什麼? – 2009-11-03 14:35:04
此外,是'返回(MyEnum)enumType;'故意,或者它應該是'返回(MyEnum)externalEnum'?當我改變它時,你的第一個例子適合我。 – gustafc 2009-11-03 14:38:57