Raf*_*l T 2 java generics interface return-value
我不明白.在java中,我允许将接口声明为方法的返回类型,如:
public List<String> get(){
return new ArrayList<String>();
}
Run Code Online (Sandbox Code Playgroud)
如果我现在有一个接口可以说I和C实现它的类,为什么我不允许这样定义:
public List<I> get(){
return new ArrayList<C>();
}
Run Code Online (Sandbox Code Playgroud)
我知道创建ArrayList<I>并添加C它的解决方案,但我想知道为什么我不允许像上面那样声明它.我认为每一个C都是一个I虽然应该没问题.
Luk*_*der 10
你不能这样做,因为List<I>和List<C>不兼容的类型.
但是,你可以这样做
public List<? extends I> get(){
return new ArrayList<C>();
}
Run Code Online (Sandbox Code Playgroud)
你遇到了共同和逆转的问题.简而言之:你的List<I>接口也有一个方法Add,它需要一个实例I,但I实际上并不是每个实例都可以实现C,就像任何其他类也可以实现的那样I.因此,您最终会遇到类型转换问题.