maven重构时类型强制转换异常解决思路

背景:我们当前正在正常使用的项目,用maven进行重构。

问题:用maven的命令编译时,报错!具体如下:

分析:在我对应的controller位置,代码如下:

(DefectActivityTypeEnum) StringUtils.transformStringToEnum(DefectActivityTypeEnum.class, operateType));

 

这样以前能正常使用,现在就不应该存在问题,所以问题很有可能是出在工具类StringUtils的对应方法里。

下面我们就去看看方法里

public static Enum<?> transformStringToEnum(Class<?> cls,String str){
  return (Enum<?>) Enum.valueOf(cls, str);
}

返回的是Enum<?>, 在看看java.lang.Enum类的valueOf()方法里返回的是什么,

public static <T extends Enum<T>> T valueOf(Class<T> enumType,String name) {
        T result = enumType.enumConstantDirectory().get(name);
        if (result != null)
            return result;
        if (name == null)
            throw new NullPointerException("Name is null");
        throw new IllegalArgumentException(
            "No enum const " + enumType +"." + name);
}

 哦,返回的是 <T extends Enum<T>> T   虽然和Enum<?> 同样都是限定返回值是枚举,但是Enum<T>,限定了返回值只能是和后面valueOf()里的参数T 同一个类型,而 ?则无限定,包括null,这就导致了maven这种强编译型的编译条件会报错!

修改结果:将StringUtils里的功能函数改为以下代码:

public static <T extends Enum<T>> T transformStringToEnum(Class<T> cls,String str){
          return Enum.valueOf(cls, str);
}

        问题解决了,特此记录,以防自己再犯类似错误,要养成常看api的习惯,不能想当然的写代码!

        勉之!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值