ensureCapacity无法识别

时间:2013-03-16 05:11:18

标签: java list

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{
}

我一直在读错误

  

线程“main”中的异常java.lang.RuntimeException:Uncompilable   源代码 - 错误的sym类型:java.util.List.ensureCapacity

4 个答案:

答案 0 :(得分:2)

ensureCapacity不是List类型的方法。

是的它是ArrayList的一个方法,但是引用bList是一个List,你应该把它转换为ArrayList来使用那个方法,如下所示:

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

顺便说一句,我从未在整个程序生命周期中直接调用ArrayList的方法ensureCapacity。

答案 1 :(得分:1)

List<T>是一个接口,但它不包含ensureCapacity的定义。这可以在ArrayListLinkedList<T>中使用 - 因此您必须将bList投射到ArrayList以致电ensureCapacity

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

答案 2 :(得分:1)

IDE总是很好用,如果你使用任何IDE进行编程,时间是宝贵的肯定你会在这个bList.ensureCapacity(listSize);行上得到一个红色标记,并带有一条消息,这将确保你有时间找到解决方案消息清楚地表明列表接口未定义ensureCapacity(int)

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

所以在List接口的实现中可以使用ensureCapacity(int)方法,该接口是ArrayList,将此行(bList)bList.ensureCapacity(listSize)转换为((ArrayList<B>) bList).ensureCapacity(listSize);

答案 3 :(得分:0)

如果要在List上调用ensureCapacity,则应将其声明为ArrayList而不是List。

一般来说,如果可以避免,就不应该进行施法。您应该声明变量尽可能通用,而不需要求助于转换。这并非总是可行,但在这种特殊情况下,没有理由不这样做。