Java处理对象和泛型列表
我对一段简单的Java代码有问题。
我无法确定它是否解决了最初的目的;
写这封信的那个人(还没找到)就告诉我了
“实现IA
的对象应该是List
类对象的容器(List
)。”乍一看,我认为这是错误的,
由于强约束(T extends IB<T>
)似乎不合逻辑,
但是IDE编译器没有显示任何相关的错误/警告
如果这样的代码有意义, 有人能提供一个这样的接口实际使用的例子吗
提前谢谢
import java.util.List;
public interface IA<T extends IB<T>> {
public List<T> getList();
}
public interface IB<T> {
public T getValue();
}
更新1:添加了具体样本类的测试
class Bar implements IA<Foo>{
List<Foo> list;
@Override
public List<Foo> getList() {
return list;
}
Bar(List<Foo> foos) {
this.list = foos;
}
}
class Foo implements IB<Foo> {
public Float data;
@Override
public Foo getValue() {
return foo;
}
Foo(Float data){
this.data = data;
}
public Float getV() {
return data;
}
}
public class DataTest {
@Test
public void myTest() {
Foo f = new Foo(10F);
List<Foo> fs = new ArrayList<>();
fs.add(f);
Bar bar = new Bar(fs);
List<Foo> foos = bar.getList();
System.out.println(foos.get(0).getV());
}
}
这是使用IA和IB的正确方法吗
# 1 楼答案
由于
T
只在协变位置使用,所以按原样使用是安全的,因此IA
上的注释可能是正确的。如果IA
有一个方法在它的一个参数中接受T
(比如int compare(T a, T b)
),这将导致问题,因为它处于相反的位置