泛型类变量的Java不兼容类型错误

时间:2017-08-22 04:53:03

标签: java generics compiler-errors

我有一个List<String>字段的课程。如果我为类定义添加了泛型参数,则在访问列表时会发生编译错误。

此代码已成功编译。

package com.test;
import java.util.LinkedList;
import java.util.List;

public class TestClass {
    public List<String> strings = new LinkedList<>();

    public static void main(String[] args) {
        TestClass c = new TestClass();
        String name = c.strings.get(0);
    }
}

但这不是编译。

package com.test;
import java.util.LinkedList;
import java.util.List;

public class TestClass<E> {
    public List<String> strings = new LinkedList<>();

    public static void main(String[] args) {
        TestClass c = new TestClass();
        String name = c.strings.get(0);
    }
}

唯一的变化是通用参数E。但该领域明确定义为List<String>。它给出了

Error:(11, 36) java: incompatible types: java.lang.Object cannot be converted to java.lang.String

代表String name = c.strings.get(0);

虽然可以通过TestClass<?> c = new TestClass();来解决,但我需要知道确切的问题。

实际上我的问题是为什么Java编译器无法识别原始类型的泛型字段?为什么它会删除与List无关的E的泛型类型?我毫不怀疑是否将列表列为List<E>

0 个答案:

没有答案