Java可以将类型参数T识别为某个类的超类型吗?

时间:2017-12-28 16:00:47

标签: java eclipse generics inheritance

背景:

我有3个类:A,B,C,它们都扩展了“Super”并实现了“Interface”,我想编写的代码只使用“Super”和“Interface”中的方法

不幸的是,我没有控制A,B,C,“超级”,“接口”的源代码来改变继承链,所以我的下一个方法是使用泛型。

我在Java 6上。

这就是我所拥有的,B和C在其他地方使用:

<T extends Super & Interface> void myMethodA() {
    @SuppressWarnings("unchecked")
    T test = (T)getA();
}

如果我删除了强制转换(T),Eclipse会给出错误Type mismatch: cannot convert from A to T

如果我保留演员,Type safety: Unchecked cast from A to T

我的推论是,'Eclipse(或Javac)不认为T是A的超类型。为了确认,我改为T extends Unrelated & Interface。 Eclipse发出错误Cannot cast from A to T。我的第二个推论是,'Eclipse可以说T不是A'的超级类型

现在,我很困惑因为我的推论存在冲突。

问题:

  1. Eclipse(或Javac)能否将类型参数识别为类的超类型?
  2. 2.a如果是这样,为什么我应该使用(T)来删除错误并仍然收到警告?

    2.b如果没有,当T更改为T extends Unrelated & Interface时,Eclipse如何给出错误?

0 个答案:

没有答案