假设您有一个接口和两个类:
interface IResult {}class AResult implements IResult {}class BResult implements IResult {}然后,您将得到返回结果列表的类:
interface ITest<T extends IResult> { List<T> getResult();}class ATest implements ITest<AResult> { // look, overridden! List<AResult> getResult();}class BTest implements ITest<BResult> { // overridden again! List<BResult> getResult();}当您需要“协变量返回”,但是返回集合而不是自己的对象时,这是一个很好的解决方案。最大的好处是,当独立于ITest接口使用ATest和BTest时,不必强制转换对象。但是,使用ITest接口时,不能将任何东西添加到返回的列表中-
无法确定列表真正包含的对象类型!如果允许,则可以将BResult添加到List (作为List <?扩展T>返回),这没有任何意义。
因此,您必须记住以下内容:List <?X>扩展定义了一个可以轻松覆盖的列表,但它是只读的。



