2013-03-16 80 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不是列表。

一般来说,如果你可以避免的话,铸件永远不应该做。你应该声明你的变量尽可能通用,而不需要求助于铸造。这并非总是可能,但在这种特殊情况下,没有理由不这样做。