Java界面问题

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)

谢谢

Sea*_*oyd 6

我认为您需要将接口声明更改为:

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)