gpt4 book ai didi

java - 为什么我不能直接对泛型类型列表使用 for-each 循环?

转载 作者:行者123 更新时间:2023-12-02 09:45:17 25 4
gpt4 key购买 nike

我正在尝试执行 for-each 循环来获取泛型类型列表的每个元素。

所以如果我先得到结果,然后执行 for-each 循环,那就没问题了。

List<MyClass<Entity>> res = response.getResponses();
MyClass<Entity> entity = res.get(0);

for(MyClass<Entity> a : res){
System.out.println(a);
}

但是如果我想直接执行 for-each 循环,IDE 会提示“不兼容的类。必需的对象,找到 MyClass”


for(MyClass<Entity> a : response.getResponses()){
System.out.println(a);
}

而且我不能像其他地方的一些帖子建议的那样使用 T 。 IDE 将显示“无法解析符号 'T'”

for(MyClass<T> a : response.getResponses()){
System.out.println(a);
}

编辑:以下是响应类定义

public class Response<T> {
private List<MyClass<T>> responses;

public Response(List<MyClass<T>> responses) {
this.responses = responses;
}

public List<MyClass<T>> getResponses() {
return this.responses;
}
}

而且返回的类型实际上是一个API调用,我调试了一下,发现它应该是Entity类型。

知道为什么吗?

最佳答案

在没有查看更多代码库的情况下,我无法给出解决该问题的个人答案,但实际问题是显而易见的。

Response 是一个具有泛型类型的类。 https://www.baeldung.com/java-generics

在继续之前阅读那篇文章,它通常是 Java 中的好信息,如果没有它,这个答案的其余部分将没有意义。

T 不扩展任何东西,因此默认情况下它扩展了 Object。这就是为什么如果你这样做ArrayList myList它相当于 ArrayList<Object> myList 。如果您可以更改响应,则可以将通用更新为 <T extends Entity>它会起作用的。假设每个通用对象 T 都将是某种实体对象。

问题是在程序中的某个时刻,您丢失了对象的具体信息,请考虑这一点。

Response r = new Response();
List<Response<Entity>> list = r.getResponses();

该代码的问题是您期待响应,但由于从未指定类型,因此默认为 Response<Object> r = new Response() 。虽然从技术上讲它可能会在幕后返回 Response,但编译器并不确定这一点。

关于java - 为什么我不能直接对泛型类型列表使用 for-each 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56710257/

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