假设我有两个接口,A和B:
public interface A {
List<B> getBs();
}
public interface B {
}和两个实现这些接口的类:
public class AImpl implements A {
public List<B> getBs() {
return null;
}
}
public class BImpl implements B {
}是否可以(也许使用泛型)让我的getter方法返回一个BImpl类型的对象列表,如下所示:
public class AImpl implements A {
public List<BImpl> getBs() {
return null;
}
}谢谢
发布于 2010-12-22 07:09:30
我认为您需要将接口声明更改为:
public interface A {
List<? extends B> getBs();
}但是,如果您想让客户端知道您使用的是哪种实现类型,事情将变得更加复杂:
public interface A<C extends B> {
List<C> getBs();
}
public class AImpl implements A<Bimpl>{
public List<Bimpl> getBs();
}发布于 2010-12-22 07:09:02
仅当您可以将A.getBs()方法的定义更改为:
List<? extends B> getBs();发布于 2010-12-22 07:11:37
不是,因为泛型类型不是协变的。
List<BImpl>不是List<B>的子类。
接口A中方法的契约的一部分是它返回一个List<B>。
public interface A {
List<B> getBs();
}List<BImpl>不支持该协定。例如,期望List<B>的收件人可能会尝试将其他类型B的实例添加到列表中--比如BImpl2和BImpl3。
只包含BImpl的List<B>将支持该约定。
https://stackoverflow.com/questions/4504800
复制相似问题