luc*_*uca 4 java generics interface covariance
假设我有2个接口,A和B:
public interface A {
List<B> getBs();
}
public interface B {
}
Run Code Online (Sandbox Code Playgroud)
和2个实现这些接口的类:
public class AImpl implements A {
public List<B> getBs() {
return null;
}
}
public class BImpl implements B {
}
Run Code Online (Sandbox Code Playgroud)
是否可能(可能使用泛型)我的getter方法返回BImpl类型对象的列表,如下所示:
public class AImpl implements A {
public List<BImpl> getBs() {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我认为您需要将接口声明更改为:
public interface A {
List<? extends B> getBs();
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您希望客户端知道您使用的实现类型,事情会变得更复杂:
public interface A<C extends B> {
List<C> getBs();
}
public class AImpl implements A<Bimpl>{
public List<Bimpl> getBs();
}
Run Code Online (Sandbox Code Playgroud)