2013-03-16 2 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: Uncompilable исходный код - Ошибочный тип SYM: 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) метод доступен в реализации интерфейса List, который ArrayList, литая ваш эта линия (Blist) bList.ensureCapacity(listSize) к ((ArrayList<B>) bList).ensureCapacity(listSize);

2

protectCapacity - это не метод типа Список.

И да это метод 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. Это доступно в ArrayList и LinkedList<T> - так что вам необходимо отправить bList на номер ArrayList, чтобы позвонить по телефону ensureCapacity.

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

Если вы хотите вызвать ensureCapacity в списке, то вы должны объявить его как ArrayList, а не список.

Кастинг, вообще говоря, никогда не должен быть выполнен, если вы можете его избежать. Вы должны объявить переменные как общие, поскольку они могут быть без необходимости прибегать к кастингу. Это не всегда возможно, но в этом конкретном случае нет причин не делать этого.