2012-05-11 95 views
6

我是Java新手,想要學習程序員可以使用的各種集合。我在Eclipse中將「java.util」導入到剪貼簿中,並檢查了以下代碼。「類型ArrayList不是泛型」是什麼意思?

ArrayList<String> list = new ArrayList<String>(); 
list.add("test1"); 
list.add("test2"); 

我收到了這個輸出。

The type ArrayList is not generic; it cannot be parameterized with arguments <String> 
Syntax error, parameterized types are only available if source level is 5.0 
The type ArrayList is not generic; it cannot be parameterized with arguments <String> 
Syntax error, parameterized types are only available if source level is 5.0 

這個錯誤是什麼意思?我沒有製作一個通用的數組列表;我做了一個字符串數組列表。此外,什麼是「源級」?

+3

了Java版本小於5 – kosa

回答

10

Eclipse中的Java版本設置爲1.4,在Java泛型只在Java 5

介紹

在Eclipse中將您的JDK更改爲1.5或更高版本,以解決此問題。

您可以通過Project - > Java Build Path - > Libraries

檢查你的JDK如果在這裏你看到它是Java 1.5或以上,然後檢查編譯器合規性設置爲5以上。

您可以檢查Project - > Java Compiler

編輯:

要添加新的JDK到Eclipse

右鍵單擊項目 - > Java構建路徑 - >庫 - >添加庫 - > JRE系統庫 - >已安裝的庫 - >添加 - >標準虛擬機 - >提供您的安裝位置,然後按確定。

注意在列表中的Ins確保你檢查你的Java 7.

+0

謝謝!我已經從Oracle下載並安裝了JDK 7。我想知道如何告訴Eclipse使用該JDK。 –

+0

編輯我的回答 – mprabhat

+0

謝謝!添加一個新的JRE系統庫,如上所述,然後將Project - > Properties - > Java Compiler中的源代碼級別更改爲6.0。 –

4

什麼進入我的腦海:

  • 檢查,如果JDK是與仿製藥完全兼容(這樣ArrayList類在JSE實際上是一個通用類)
  • 檢查,如果你沒有另一個ArrayList其中有範圍的優先級和覆蓋標準庫定義
+0

我不得不從構建路徑中刪除org.osgi.foundation-1.2.0.jar來解決這個問題。感謝這個想法。 –

1

是的問題消失1.5和以上。感覺這個問題並沒有完全解決,但我加了2美分,以防有人遇到這個問題。這主要是關於這部分的問題:

我沒有做出一個通用的數組列表;我做了一個字符串數組列表。

錯誤消息中提到:

>的ArrayList類型不是通用;它不能參數帶參數<字符串>

>語法錯誤,參數化類型僅適用,如果源級別是5.0

這實際意味着,由於Java 1.5中,我們可以使用Type參數也一樣(其中一個用於使用值參數)。 JDK 1.5引入了泛型,它允許我們對類型進行抽象(或參數化類型)。

關於類型定義中的類設計者可以是通用。 ArrayList的實現將是如下:

public class ArrayList<E> implements List<E> .... { 
    // Constructor 
    public ArrayList() {...} 

    // Public methods 
    public boolean add(E e) {...} 
    public void add(int index, E element) {...} 
    public boolean addAll(int index, Collection<? extends E> c) {...} 
    public abstract E get(int index) {...} 
    public E remove(int index) {...} 
    ... 
} 

Ë可以任何型像字符串或整數等故名通用的ArrayList。

在使用者可以在對象的實例化或方法調用將其在此實例中做過類似下面期間是特定的類型:

ArrayList<String> list = new ArrayList<String>(); 

(這是在上述情況下的混亂,如果我沒有錯: - ))泛型的使用(如果需要)的

實施例:

// Declaring a DAO layer 
public interface IMasterAbstractDao<E, I> { 
    public E findById(I id) {...} 
    public void delete(E e) {...} 
    public List<E> findByCriteria(Criterion criterion) {...} 
} 

Ë是實體噸ype回來了。這可用於系統中定義的所有型號beans,從而使其具有通用性。

希望這會有所幫助。

Reference: Java Programming Tutorial - Generics

相關問題