recherche

Maison  >  Questions et réponses  >  le corps du texte

java-se - java无界通配符的应用?

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, 发现未注释的代码仍然编译正确, 这个是怎么回事呢? 一样是无界通配符, 只是添加了中间变量, 产生的结果却不同呢?

PHP中文网PHP中文网2888 Il y a quelques jours349

répondre à tous(1)je répondrai

  • 大家讲道理

    大家讲道理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()) {
    }

    répondre
    0
  • Annulerrépondre