2013-03-16 130 views
2
import java.util.*; 
class A{ 
    public static void main(String[] args){ 
    } 
    private List <B> bList; 
    private Random generator = new Random(); 
    A(List<B> initialList){ 
     bList = new ArrayList<B>(); 
     int listSize = initialList.size(); 
     bList.ensureCapacity(listSize); 
      for (B b : initialList) { 
      int bIndex = generator.nextInt(listSize); 
      bList.add(bIndex , b); 
     } 
    } 
} 
class B{ 
} 

我已經越來越錯誤讀取的ensureCapacity不承認

異常在線程「主」了java.lang.RuntimeException:不可編譯的 源代碼 - 錯誤的符號類型:java.util.List.ensureCapacity

回答

1

IDE的是總是好的,時間是寶貴的,如果你使用任何IDE編程肯定你會得到一個消息,這個bList.ensureCapacity(listSize);線,這將確保你的時間,找出解決辦法的一個紅色標記消息明確說明ensureCapacity(int)對於List接口是未定義的。

The method ensureCapacity(int) is undefined for the type List<B> 

所以ensureCapacity(int)方法是可用列表界面,該界面的ArrayList實現內部的,你要把你的這條線(bList)bList.ensureCapacity(listSize)((ArrayList<B>) bList).ensureCapacity(listSize);

2

ensureCapacity不是List類型的方法。

而且是它的ArrayList中的方法,但是參考bList是一個列表,你應該將它轉換到ArrayList的使用該方法,像這樣:

((ArrayList<B>) bList).ensureCapacity(listSize); 
     for (B b : initialList) { 
     int bIndex = generator.nextInt(listSize); 
     bList.add(bIndex , b); 
    } 

順便說一句,我從來沒有調用該方法在我的整個程序生命中直接確保ArrayList的容量。

1

List<T>是一個接口,但它不包含定義ensureCapacity。這在ArrayListLinkedList<T>中可用 - 因此您必須將bList轉換爲ArrayList以致電ensureCapacity

((ArrayList<B>) bList).ensureCapacity(listSize); 
0

如果你想調用的ensureCapacity的名單,那麼你應該將它聲明作爲ArrayList不是列表。

一般來說,如果你可以避免的話,鑄件永遠不應該做。你應該聲明你的變量儘可能通用,而不需要求助於鑄造。這並非總是可能,但在這種特殊情況下,沒有理由不這樣做。