2014-02-28 69 views
1
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); 
    } 
} 

在編譯時我收到錯誤,如下面不能使靜態referecnce的非靜態類型E

ERROR在Gen.java(第6行)

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

不能靜態引用非靜態類型E

Gen.java中的錯誤(在第6行)

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

不能使靜態參考非靜態類型E

回答

2

你想要的是一個字符串列表,而不是一個未定義的,虛構的E型的列表:

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

或簡單,如果您使用的是Java 7:

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

通過閱讀the tutorial瞭解泛型。

1

類型E不存在。

這裏,sString列表,以便使用:List<String> s = new ArrayList<String>();

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); 
} 
+0

@Selva - 在這個代碼,你可以看到,makeList'的''從該test'調用傳遞String'的'數組,並預計回報'列表'。靜態的'makeList'方法使用'T'而不是'String',但聲明它返回一個與數組的組件類型相同的'List'。這匹配使用,因此通過編譯。 – OldCurmudgeon