有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    由于T只在协变位置使用,所以按原样使用是安全的,因此IA上的注释可能是正确的。如果IA有一个方法在它的一个参数中接受T(比如int compare(T a, T b)),这将导致问题,因为它处于相反的位置