2014-12-02 5 views
0

У меня ожидаемую ошибку идентификатор в этом блоке кода:Идентификатор Ожидаемая Hash Ошибка Таблица

@SuppressWarnings({"rawtypes","unchecked"}) 
    theLists = new List<AnyType>[ nextPrime(2 * theLists.length) ]; 
for(int j = 0; j < theLists.length; j++) 
     theLists[ j ] = new LinkedList<>(); 

Компилятор говорит, что должен быть идентификатором после «theLists» и перед =. Какой идентификатор? Как это исправить?

Это полный метод:

 private void rehash() 
{ 
    List<AnyType> [ ] oldLists = theLists; 

     // Create new double-sized, empty table 
@SuppressWarnings({"rawtypes","unchecked"}) 
    theLists = new List<AnyType>[ nextPrime(2 * theLists.length) ]; 
for(int j = 0; j < theLists.length; j++) 
     theLists[ j ] = new LinkedList<>(); 

     // Copy table over 
    currentSize = 0; 
    for(List<AnyType> list : oldLists) 
     for(AnyType item : list) 
      insert(item); 
} 

я удалил предупреждение исключит из тела и просто положить его в конструкторе, но он по-прежнему говорит, что идентификатор ожидается:

public HashTable(int size) 
{ 

    @SuppressWarnings("unchecked") theLists = (List<AnyType>[]) new List<?>[nextPrime(2 * theLists.length)]; 
for(int i = 0; i < theLists.length; i++) 
     theLists[ i ] = new ArrayList<>(); 

} 
+1

Вы не можете использовать кронштейн обозначения на неконтактного типа массива. Кроме того, «Список» не может быть создан. – August

+0

@August Это похоже на тип массива. –

+0

Это тип массива. – user2820406

ответ

0

аннотацию может появляются только в following locations

  • Me THOD декларации (в том числе элементы типов примечаний)
  • деклараций Constructor
  • объявления полей (в том числе перечисления констант)
  • формальных и исключения деклараций параметров
  • Локальные объявления переменных (в том числе переменных петлевых для заявлений и переменных ресурсных примерочных с-ресурсами заявлений)

Вы пытаетесь применить его здесь

@SuppressWarnings({"rawtypes","unchecked"}) 
theLists = new List<AnyType>[ nextPrime(2 * theLists.length) ]; 

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

Как только вы это сделаете, вы получите сообщение об ошибке, из-за которой вы не можете создать общий массив. Есть вопросы и ответы на вопросы many. Прочтите их.

Вы можете сделать

theLists = (List<AnyType>[]) new List<?>[nextPrime(2 * theLists.length)]; 
+0

Я все еще получаю ожидаемую ошибку идентификатора. Я отредактировал исходный вопрос с обновлением. @Sotirios – user2820406

+0

@ user2820406 Вы все еще используете аннотацию в неприемлемом месте. Аннотировать объявление конструктора, а не выражение присваивания. –

+0

Я понял! Спасибо! – user2820406