我在这段代码中遇到了标识符预期错误:
@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<>( );
}
答案 0 :(得分:0)
注释只能出现在following locations
中
- 方法声明(包括注释类型的元素)
- 构造函数声明
- 字段声明(包括枚举常量)
- 正式和异常参数声明
- 局部变量声明(包括for的循环变量) try-with-resources语句的语句和资源变量)
您正在尝试在此处应用
@SuppressWarnings({"rawtypes","unchecked"})
theLists = new List<AnyType>[ nextPrime( 2 * theLists.length ) ];
这不是声明,而是赋值表达式。那不行。而是注释包含此代码的方法。
一旦这样做,您将收到一个无法创建通用数组的错误。关于这方面有many个问题和答案。阅读那些。
你可以做到
theLists = (List<AnyType>[]) new List<?>[nextPrime(2 * theLists.length)];