`

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的习惯,不能想当然的写代码!

        勉之!

  • 大小: 18.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics