gpt4 book ai didi

Java - 使用对象和泛型列表

转载 作者:太空宇宙 更新时间:2023-11-04 11:11:43 25 4
gpt4 key购买 nike

我对一段简单的 Java 代码有疑问。我无法确定它是否解决了最初的目的;写它的人(但无法联系到)只是告诉我“实现 IA 的对象应该是 List 类似对象的容器( IB )”。乍一看我认为这是错误的,由于强约束( T extends IB<T> )似乎不合逻辑,但IDE编译器没有显示任何相关的错误/警告。

如果这样的代码有意义,有人可以提供此类接口(interface)的实际使用示例吗?

提前致谢。

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 的正确方法吗?

最佳答案

由于T仅用于协变位置,因此直接使用是安全的,因此对IA的注释可以是正确的。如果 IA 有一个方法在其参数之一中接受 T(例如 intcompare(T a, T b)),则会导致问题,因为它处于逆变位置。

关于Java - 使用对象和泛型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45924308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com