枚举类 valueOf 后强转的问题

枚举类 valueOf 后强转的问题

遇上过的最诡异的问题了。。。

在自己查看、修改源码的时候,用 maven 打包时报错了,但是却不是我改的地方,为此,我写了个小测试试了一下这个代码

import org.junit.jupiter.api.Test;

public class EnumTest {
    @Test
    public void testValueOf(){
        Week monday = getByName(Week.class, "monday");
    }

    private <T> T getByName(Class<T> type, String name){
        if(Enum.class.isAssignableFrom(type)){
        	return type.cast(Enum.valueOf((Class<? extends Enum>) type, name));
        }
        return null;
    }
}

enum Week{
    monday,
    tuesday,
    wednesday,
    thursday,
    friday,
    saturday,
    sunday
}

点击执行的时候,总是提示编译错误,Object 无法转换为T。虽然他们应该是同一个对象

最后我将代码略作修改

// 将一行代码拆成了两行
// return type.cast(Enum.valueOf((Class<? extends Enum>) type, name));
Enum value = Enum.valueOf((Class<? extends Enum>) type, name);
return type.cast(value);

测试顺利通过。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值