Jör*_*ann 22
看来你并不是唯一一个对这个定义感到困惑的人,这篇博文有一个解释:http://mbravenboer.blogspot.com/2008/12/why-jvm-spec-defines-checkcast-for.html
事实证明,这确实是一个"不可能"的案例.这个项目在规范中的原因是因为为数组递归定义了checkcast:
- 如果S是表示数组类型SC []的类,即SC类型的组件数组,则:
- ...
- 如果T是数组类型TC [],即TC类型的组件数组,则必须满足以下条件之一:
- ...
- TC和SC是引用类型,并且可以通过递归应用这些规则将类型SC转换为TC.
因此,如果您有一个类型为List []的对象被强制转换为Collection [],那么对于类型S = List和T = Collection,将以递归方式调用checkcast规则.请注意,List是一个接口,但对象在运行时可以具有类型List [].如果还没有使用JVM Spec维护者验证这一点,但据我所知,这是接口类型规则存在的唯一原因.