Java 警告未检查泛型层次结构的转换

Java warns that a casting is unchecked for generics hierarchy

如果我为 class 定义以下类型:

class SomeClass<A extends InterfaceA, B extends InterfaceB, C extends B>

虽然 InterfaceB 扩展了 InterfaceA。 B 也扩展了 A 但我不能在那里声明。

C 类型的对象转换为 [BInterfaceAInterfaceB ] 中的任何一个时,没有任何警告(如预期的那样)。

但是当将 C 转换为 A 时,会出现未经检查的转换警告。为什么?

因为A不在C的继承链中

 InterfaceA
 /        \
A      InterfaceB
       /
      B
     /
    C

因为 C 扩展了 B,B 实现了 InterfaceB,而后者又扩展了 InterfaceA。 C 不扩展 A.