全限定名完全相同的两个类转换出现类型转换错误分析

68次阅读

共计 337 个字符,预计需要花费 1 分钟才能阅读完成。

描述

最近在公司开发一个新的需求:同事写好了一个工具类并且通过@Component 的方式交给 Spring 容器进行管理,然后我在代码中按名字从 Spring 容器中获取这个对象。在获取的时候出现了以下的错误:

com.utils.A cannot not be cast to com.utils.A

问题解决思路

百度搜索之后发现全限定名相同的类进行转换出现错误可能是 类加载器不相同 而导致的。

接下来我使用 Class.getClassLoader()验证是否类加载器不一致。
需要提醒的是:放在 Spring 中对象此时不能再通过按类型取出,因为本身类型已经不一致了,此时可以通过按名字获取。

getClassLoader() == null 时,是指类加载器为 BootStrap ClassLoader

正文完
 0