今天看spring源码看到这样一段:
查看ConfigurableListableBeanFactory和BeanDefinitionRegistry类结构图:
八竿子打不着的两个接口,但是可以强制转换,而且连警告都没有。
但是还有这么一个类:
经测试发现,如果两个不想关的类,直接强制转换,会报错,因为编译器可以知道这两个肯定是不能互相转换的。
但是两个接口,编译器不会报错,为什么呢?因为实现类可能会同时实现两个接口,那么就可以转换了。但是如果实现类确实没有两个接口都实现,那么运行时是会报错的。
正如java泛型机制,其中一个好处将运行时错误提前到编译时发现,而这个只能在运行时报错,总感觉哪儿有点不对!
原文:https://www.cnblogs.com/zby9527/p/9042694.html