无法对非静态类型E进行静态引用

时间:2014-02-28 12:35:14

标签: java generics collections

import java.util.*;

public class Gen {
    public static void main(String[] args) {
        String[] name = {"Selva", "KSA", "selva","ksa"};
        List<E> s = new ArrayList<E>(); 
        s.addAll(Arrays.asList(name));
        System.out.println(s);
    }
}

编译时我收到如下错误

  

Gen.java中的错误(第6行)

    List<E> s = new ArrayList<E>(); 
         ^
     

无法对非静态类型E

进行静态引用      

Gen.java中的错误(第6行)

  List<E> s = new ArrayList<E>(); 
                            ^
     

无法对非静态类型E

进行静态引用

3 个答案:

答案 0 :(得分:2)

你想要的是一个字符串列表,而不是一个未定义的虚构类型E的列表:

List<String> s = new ArrayList<String>();

或更简单,如果您使用的是Java 7:

List<String> s = new ArrayList<>();

通过阅读the tutorial来了解泛型。

答案 1 :(得分:2)

您可以让系统推断出类型,否则不能,您不能在静态上下文中使用动态类型。

public static <T> List<T> makeList(final T... values) {
    List<T> list = new ArrayList(Arrays.asList(values));
    return list;
}

public void test() {
    String[] names = {"Selva", "KSA", "selva", "ksa"};
    List<String> s = makeList(names);
    System.out.println(s);
}

答案 2 :(得分:1)

类型E不存在。

此处,sString的列表,因此请使用:List<String> s = new ArrayList<String>();