【发布时间】:2019-06-21 20:45:53
【问题描述】:
我正在尝试执行一个 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.getResponses()的完整方法定义,以及response的声明? --- "IDE 将显示 "Cannot resolve symbol 'T'"" - 为了使用T,您需要在类或方法上定义T。如果您不想或无法定义T,请使用?(可能带有通配符)。 -
在您的第二个示例中,关于该特定行的错误是什么?假设没有交换其他代码,第一个和第二个应该是等效的
-
你需要先在你的泛型方法中声明 T,public static
List > -
@MatthewKerian 是的,关于“MyClass
a”会有一条红色下划线 -
Response 在哪里实例化?泛型 T 不扩展任何东西,所以编译器无法判断它应该是什么类型,所以它默认为 Object。
标签: java foreach generic-list generic-type-argument