有以下类:
public class LivingBeing { … }
然后是
public class Human extends LivingBeing { … }
现在还有这个包装器:
public class LivingBeingWrapper<T extends LivingBeing> { … }
完成图片还有方法
public boolean validate(LivingBeingWrapper<LivingBeing> livingBeingWrapper)
现在写下面的代码时
LivingBeingWrapper<Human> wrapper = createHumanWrapper();
validate(wrapper);
我得到以下编译错误:
The method validate(LivingBeingWrappe<LivingBeing> livingBeingWrapper) in the type MyType is not applicable for the arguments (LivingBeingWrapper<Human>).
但是为什么? Human
扩展了 LivingBeing
。
最佳答案
香蕉是一种水果。但是香蕉列表不是水果列表。否则,您可以获取香蕉列表并添加一个苹果(假定苹果是一种水果)。
这听起来很玄乎,但它是上面发生的事情的关键。您需要指定包装器,使其采用扩展 LivingBeing
的类型。
有关详细信息,请参阅 this article ,尤其是“泛型不是协变的”部分。
关于java - 使用泛型编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12704583/