我有一种情况,我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<capture#117 of ? 扩展 java.lang.Enum<?>> [javac] 必需:myEnum [javac] if( externalEnum instanceof MyEnum )
我得到了该函数的一个版本,只需返回即可MyEnum.valueOf(externalEnum.name())
工作 - 它可以工作,这才是最重要的。但是,我对编译器错误感到困惑。
在这种情况下,我试图了解泛型的具体化过程。的一个实例Enum<? extends Enum<?>>
或简单地Enum<?>
可以是一个MyEnum
(假设后者永远不能是前者的子类型以外的任何东西。)
所以instanceof
测试应该可以工作,但是在通用定义中似乎有一些东西Enum
(也许是 Enums 不能扩展的事实)导致编译器对该特定语句产生呕吐。
对我来说,解决方法很简单,但我喜欢很好地理解问题,对此的任何见解将不胜感激。
- 路易斯。