2013-10-15 3 views
0

Я встречаюсь с предупреждениями о непроверенных бросках. Я не уверен, как разрешить предупреждения.Предупреждение: [непроверенный] снятый флажок. Generics

Ошибка компилятора, на которую следует обратить внимание list = (E[]) new IntKeyed [size];
Какой код мы предположительно используем для письма.
Мы пытаемся использовать Generics, следовательно, «E».

Итак, я полагаю, что я должен был заглушить где-то в этом коде. Когда я искал ошибку, она, похоже, имела дело с ArrayLists, но я не использую ArrayList, насколько мне известно.

Может быть, я должен быть ArrayLists? Изменили ли это предупреждения? У меня также есть проблема с неполной обработкой исключений в моем коде. Но я думаю, что это изолировано от проблемы с массивом.

Любые ошибки, которые вы можете найти, помогут указать мне в правильном направлении. Благодарю.

public abstract class MyArrayList<E> implements IntKeyed 
{ 

private final int DEFCAP = 50; 
private int origCap; 
private int numElements; 
private E[] list; 

public MyArrayList() 
{ 
    origCap = DEFCAP; 
    list = (E[]) new IntKeyed [origCap]; *******Error Here 
} 

public MyArrayList(int size) throws Exception 
{ 
    size = DEFCAP; 
    if(size > 0) 
    { 
     list = (E[]) new IntKeyed [size]; *******Error Here 
     origCap = size; 
    } 
    else 
    { 
     throw new ArrayStoreException(); 
     System.out.println("List size is invalid"); 
    } 
    list = (E[]) new IntKeyed [size];   *******Error Here 
} 

private void enlarge() 
{ 
    E[] larger = (E[]) new IntKeyed [list.length + origCap]; *******Error Here 
    for(int i = 0; i < list.length; i++) 
    { 
     larger[i] = list[i]; 
    } 
    list = larger; 
} 

При компиляции с javac -Xlint:unchecked MyArrayList.java я получаю:

MyArrayList.java:29: warning: [unchecked] unchecked cast 
    list = (E[]) new IntKeyed [origCap]; 
       ^
required: E[] 
found: IntKeyed[] 
where E is a type-variable: 
E extends Object declared in class MyArrayList 
MyArrayList.java:37: warning: [unchecked] unchecked cast 
     list = (E[]) new IntKeyed [size]; 
        ^
required: E[] 
found: IntKeyed[] 
where E is a type-variable: 
E extends Object declared in class MyArrayList 
MyArrayList.java:45: warning: [unchecked] unchecked cast 
    list = (E[]) new IntKeyed [size]; 
       ^
required: E[] 
found: IntKeyed[] 
where E is a type-variable: 
E extends Object declared in class MyArrayList 
MyArrayList.java:117: warning: [unchecked] unchecked cast 
    E[] larger = (E[]) new IntKeyed [list.length + origCap]; 
        ^
required: E[] 
found: IntKeyed[] 
where E is a type-variable: 
E extends Object declared in class MyArrayList 
MyArrayList.java:43: error: unreachable statement 
     System.out.println("List size is invalid"); 
     ^
1 error 
4 warnings 

ответ

1

предупреждения не проблема, проблема в том, недостижимый оператор после броска исключение.

это должно быть так:

System.out.println("List size is invalid"); 
throw new ArrayStoreException(); 

Если ваш считаете, что ваши забросы должны работать - добавить @SuppressWarnings("unchecked") на метод или уровне оператора (меньше сфера, тем лучше). Компилятор не выдаст никаких сообщений, но вы все равно получите исключение во время выполнения, если вы ошибаетесь.

1

Предупреждение при list = (E[]) new IntKeyed [origCap]; практически означает, что общий E настоящее время жёстко, как IntKeyed так, что вы прослыть E, ваш list будет всегда оставаться типа IntKeyed.

В вашем случае универсальное использование, похоже, не подходит, поскольку вы уже реализуете определенный интерфейс для этой цели.

Смежные вопросы