Java泛型列表编译错误

标签 java generics

为什么我在这行 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/

相关文章:

java - 安卓/Java : Is there a way to call the return of the method after a listener triggered?

java - 如何在没有HTTP标签的情况下在Spring Security中设置基本身份验证?

java - 重复键值对

java - 如何将java泛型翻译成Delphi

generics - 通用类型引用的 Rust 约束

java - Java 7 中泛型类变量访问的变化

java - 在 Java Spring 中使用资源包中的区域设置

java - 使用操作更新另一个类中的实例变量

typescript - 形式为 `<T extends E>` 的通用约束,其中 `E` 是 `enum` ?

templates - StarUML 类图 : How to manually add Generics (Template Type T) for a class