java无界通配符的应用?

发布于 2022-09-02 12:06:00 字数 551 浏览 8 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

很糊涂小朋友 2022-09-09 12:06:00

这个就没问题

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()) {
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文