不承认的保证 import java.util.*; 甲级{ 公共静态void main(字符串[]args){ } 私人名单; 专用随机生成器=新随机(); A(初始列表){ bList=newarraylist(); int listSize=initialList.size(); bList.recapacity(列表大小); 对于(B:初始列表){ int bIndex=generator.nextInt(listSize); bList.add(bIndex,b); } } } B类{ }

不承认的保证 import java.util.*; 甲级{ 公共静态void main(字符串[]args){ } 私人名单; 专用随机生成器=新随机(); A(初始列表){ bList=newarraylist(); int listSize=initialList.size(); bList.recapacity(列表大小); 对于(B:初始列表){ int bIndex=generator.nextInt(listSize); bList.add(bIndex,b); } } } B类{ },java,list,Java,List,我一直在读错误 线程“main”java.lang.RuntimeException中的异常:不可编译 源代码-错误的符号类型:java.util.List.EnsureCapity ensureCapacity不是List类型的方法 是的,它是ArrayList的一个方法,但引用bList是一个列表,您应该将其强制转换为ArrayList以使用该方法,如下所示: import java.util.*; class A{ public static void main(String[]

我一直在读错误

线程“main”java.lang.RuntimeException中的异常:不可编译 源代码-错误的符号类型:java.util.List.EnsureCapity


ensureCapacity不是List类型的方法

是的,它是ArrayList的一个方法,但引用bList是一个列表,您应该将其强制转换为ArrayList以使用该方法,如下所示:

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{
}
((ArrayList)bList.ensureCapacity(listSize);
对于(B:初始列表){
int bIndex=generator.nextInt(listSize);
bList.add(bIndex,b);
}
顺便说一下,在我的整个程序生命周期中,我从未直接调用ArrayList的方法ensureCapacity。

List
是一个接口,但它不包含
ensureCapacity
的定义。这在
ArrayList
LinkedList
中可用-因此您必须将
bList
强制转换为
ArrayList
以调用
ensureCapacity

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

IDE总是好的,时间是宝贵的,如果您使用任何IDE编程,您肯定会在这个
bList.ensureCapacity(listSize)上得到一个红色标记与一条消息连成一行,这将确保您有时间找到解决方案。该消息清楚地表明,
ensureCapacity(int)
对于列表界面是未定义的

((ArrayList<B>) bList).ensureCapacity(listSize);
类型列表的方法ensureCapacity(int)未定义

因此,在列表接口(ArrayList)的实现中可以使用
ensureCapacity(int)
方法,将此行(bList)
bList.ensureCapacity(listSize)
强制转换为
((ArrayList)bList.ensureCapacity(listSize)

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

一般来说,如果你能避免的话,就不应该进行铸造。您应该声明变量尽可能通用,而无需强制转换。这并不总是可能的,但在这种特殊情况下,没有理由不这样做

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