Maison > Questions et réponses > le corps du texte
enum Search
{
HITHER , YON
}
public class UpCastEnum
{
public static void main(String[] args)
{
Search[] vals = Search.values() ;
Enum e = Search.HITHER ;
for(Enum en : e.getClass().getEnumConstants())
{
}
/*
如果改写成这样就会报错
Class<?> clazz = e.getClass() ;
for(Enum en : clazz.getEnumConstants())
{
}
*/
}
}
一开始我以为是编译器的自动优化, 于是将jdk版本从1.8降回了1.6, 发现未注释的代码仍然编译正确, 这个是怎么回事呢? 一样是无界通配符, 只是添加了中间变量, 产生的结果却不同呢?
大家讲道理2017-04-17 17:35:11
Ce n'est pas un problème
Class<? extends Enum> clazz = e.getClass();
for (Enum en: clazz.getEnumConstants()) {
}
Si <? extends Enum>
est spécifié, le Class<T>
défini dans T[] getEnumConstants()
peut clairement renvoyer une valeur de type T
, qui est Enum
dans l'exemple ci-dessus. S'il n'est pas précisé, il est de type Object
, donc il peut être
Class<?> clazz = e.getClass();
for (Object en: clazz.getEnumConstants()) {
}
// 或者
for (Enum en: (Enum[]) clazz.getEnumContaint()) {
}