为什么我在这行 String s=data.get(idx); 中遇到编译错误
更新:我得到类型不匹配:无法从 E 转换为字符串
public class Parent<E> {
ArrayList<E> data=new ArrayList<E>();
public void add(E d){
data.add(d);
}
public List<E> getData(){
return data;
}
}
public class Child<E> extends Parent<E>{
public void appendData(E newItem){
super.add(newItem);
}
public void displayData(int idx){
List<E> data=this.getData();
**String s=data.get(idx);**//I get compilation error in this line
System.out.println(s);
}
public static void main(String[] args) {
Child<String> c=new Child<String>();
c.appendData("Data1");
c.appendData("Data2");
c.displayData(1);
}
}
解决方案更新类:
public class Child<S> extends Parent<String>{
public void appendData(String newItem){
super.add(newItem);
}
public void displayData(int idx){
List<String> data=this.getData();
String s=data.get(idx);
System.out.println(s);
}
public static void main(String[] args) {
Child c=new Child();
c.appendData("Data1");
c.appendData("Data2");
c.displayData(1);
}
}
最佳答案
这应该不难理解:
在 String s=data.get(idx);
, data
类型为ArrayList<E>
。鉴于您在 E
中没有特殊限制,可以是不是字符串的任何类型。试想一下,如果您使用 Child<Date>
会发生什么? ,其中data
实际上是 ArrayList<Date>
, String s = data.get(i)
根本没有意义。
因此,编译器向您提示您不能简单地假设 data.get(index)
的结果。成为一个字符串。
修复方法非常简单。例如,您可以按照其他人的答案中的建议进行操作。这也可能是您的设计问题,您的Child
不应包含类型参数,它应从 Parent<String>
扩展。然而,更重要的是您了解为什么它不起作用,以便您可以选择正确的方法来解决您的问题。
关于Java泛型列表编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18371243/