【发布时间】:2009-11-03 14:28:41
【问题描述】:
我有一种情况,我从外部系统收到enum,为此我需要返回我们自己的enum。这两个枚举具有完全相同的字面值:
// 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] 发现:java.lang.Enum我通过简单地返回MyEnum.valueOf(externalEnum.name()) 获得了该函数的一个版本——它可以工作,这就是最重要的。但是,我对编译器错误感到困惑。
在这种情况下,我试图了解泛型的具体化过程。 Enum<? extends Enum<?>> 的实例或简单的 Enum<?> 可以是 MyEnum(鉴于后者只能是前者的子类型。)
所以instanceof 测试应该可以工作,但是Enum 的通用定义中似乎有一些东西(也许是枚举不能扩展的事实)导致编译器对该特定语句进行呕吐。
解决方法对我来说很简单,但我喜欢很好地理解问题,如果对此有任何见解,我们将不胜感激。
- 路易斯。
【问题讨论】:
-
您的错误消息包含一个小写的“myEnum”,但我在您的代码中没有看到小写的“myEnum”。您的代码中定义的小写“myEnum”在哪里?它在这个函数中做了什么?
-
另外,
return (MyEnum)enumType;是故意的,还是应该是return (MyEnum)externalEnum?当我改变它时,你的第一个例子对我来说很好。
标签: java generics enums instanceof