前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >泛型<T>未定义类型之强制类型转换踩坑

泛型<T>未定义类型之强制类型转换踩坑

原创
作者头像
查拉图斯特拉说
发布2024-02-08 22:11:40
1020
发布2024-02-08 22:11:40
举报
文章被收录于专栏:后端架构后端架构

前言

这一节主要是介绍泛型强制类型转换。所产生的一些坑。一开始我还以为是jason转换的原因。因为之前配置的实体里面手动写的方法都生成了相应的属性,但是这次却没有,所以我一开始还以为是杰森。反虚化的原因。去直到我一步步锻炼去调试。会相应的问题才发现是类型转换异常。

jackson序列化

添一部分json序列化的代码。

代码语言:javascript
复制
    private static final ObjectMapper MAPPER = new ObjectMapper();

    static {
        MAPPER.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        MAPPER.setSerializationInclusion(Include.NON_NULL);
    }

    /**
     * Convert target object to json string.
     *
     * @param obj target object.
     * @return converted json string.
     */
    public static String getJsonFromObject(Object obj) {
        try {
            return MAPPER.writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            throw new IllegalStateException("Fail to convert '" + obj + "' to String.", e);
        }
    }

目标方法

这是我手动定义的。手动配置的转换格式的方法

代码语言:javascript
复制
    @ApiModelProperty(value = "文件大小默认字节", example = "21M")
    @JsonSerialize(using = FileSizeToStandardStrConverter.class)
    public Long getFileLengthFormat() {
        return fileLength;
    }

明明我这个实体类有这个方法。但是当我去断点调试的时候,我想去查看这个方法说法没的属性值的时候就发现无法调用。这个方法提示没有检测到这个实例方法,这就非常的奇怪。我还以为是我的测试类的问题。然后我以为我又mock了,但实际我查看代码上不存在这种情况。

然后我就直接用一个代码执行窗口来检测相应的结果。居然也是一模一样的。

最后我实在没有办法,干脆在代码里面直接让程序跑这段代码result.get(0).getFileLengthFormat(),看一下他到底会出现什么错误。

定位问题

然后我就发现了非常常见的一个异常ClassCastException类型转换异常。然后我就非常疑惑。什么时候我开始定义的一个这个类他支持这个方法的,而且是我亲自写的这个方法,但是确抛出了异常。

最后我再仔细回到断点的的地方,却发现原来这个类的引用是另外一个类。好的,到此真相大白。一开始我以为是json转换的问题。没想到后面是类型转换。

但是这里又有一个点,明明两个类之间没有互相关联,但它只是会有一些公共的属性是相同的。但是他却没有提示一些类型转换异常,直到你去调用相应的一些。不存在的方法的时候才会出现好坑啊。我这里引用的类是FileFavorite但实际我定义的类叫FileFavoriteVo太让人迷惑了。

总结

最后我想说的在吧,就像渡劫一样,也只有经过了九九八十一难。然后你的代码才会顺风顺水,有一些坑在所难免。你只有亲自去踩过,你才知道。有一些代码异常在这个作者看来,他认为是正常的,但是应用到实际的业务当中。就感觉匪夷所思,明明这里应该抛出一个异常的,但没有抛出异常。

最后

点赞关注评论一键三连,每周分享技术干货、开源项目、实战经验、国外优质文章翻译等,您的关注将是我的更新动力

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • jackson序列化
  • 目标方法
  • 定位问题
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档