用泛型编译错误

3 java generics inheritance extends compiler-errors

有以下课程:

public class LivingBeing { … }
Run Code Online (Sandbox Code Playgroud)

那就是

public class Human extends LivingBeing { … }
Run Code Online (Sandbox Code Playgroud)

现在还有这个包装器:

public class LivingBeingWrapper<T extends LivingBeing> { … }
Run Code Online (Sandbox Code Playgroud)

并且为了完成图片,还有方法

public boolean validate(LivingBeingWrapper<LivingBeing> livingBeingWrapper)
Run Code Online (Sandbox Code Playgroud)

现在编写以下代码时

LivingBeingWrapper<Human> wrapper = createHumanWrapper();
validate(wrapper);
Run Code Online (Sandbox Code Playgroud)

我得到以下编译错误:

MyType类型中的方法validate(LivingBeingWrappe <LivingBeing> livingBeingWrapper)不适用于参数(LivingBeingWrapper <Human>).

但为什么?Human延伸LivingBeing.

Bri*_*new 6

香蕉是一种水果.但是一份香蕉清单并不是一份水果清单.否则你可以拿一份香蕉列表并加一个苹果(假设苹果是一种水果).

这听起来相当古怪,但它是上面发生的事情的关键.您需要指定包装器,以便扩展类型LivingBeing.

有关详细信息,请参阅此文章,特别是"Generics not covariant"部分.