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

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

1 个回答
  • 这个就没问题

    Class<? extends Enum> clazz = e.getClass();
    for (Enum en: clazz.getEnumConstants()) {
    }

    如果指定了 <? extends Enum>,由 Class<T> 中定义的 T[] getEnumConstants() 可以明确返回值是 T 类型的,上例就是 Enum。如果没指定,就是 Object 类型的,所以可以

    Class<?> clazz = e.getClass();
    for (Object en: clazz.getEnumConstants()) {
    }
    // 或者
    for (Enum en: (Enum[]) clazz.getEnumContaint()) {
    }
    2022-11-12 01:39 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有