Java Generics, Необратимый тип, Типирование, Куча D-Ary - PullRequest
2 голосов
/ 30 августа 2011

Это мой метод удаления кучи.Я получаю много ошибок «необратимого типа» при компиляции.Также обратите внимание, что моя программа расширяет Comparable.

public class HeapImpl12<T extends Comparable<? super T>> implements Heap12<T>

Я знаю, что мой массив не объект типа, а тип T.

T[] _nodeArray = (T[]) new Comparable[DEFAULT_ARRAYSIZE]; 

Вопрос: Я понимаю, что все должно быть типа T, но когдаЯ писал свой код, я получил много ошибок «НЕ МОЖЕТ ПРЕОБРАЗОВАТЬ ТИП T В ТИП INT», поэтому я решил выполнить типографский перевод, чтобы сделать его того же типа (T) или (Integer).Теперь я понимаю, что это неправильно, так как я получаю ошибку «необратимый тип».Кто-то, кто хорошо разбирается в Java Generics, расскажите, пожалуйста, о методах и советах, как хранить все ошибки типа T.

public void remove(T o) {
    for(int i = 0; i < _nodeArray.length; i++){
        if(_nodeArray[i].equals(o)){
            _nodeArray[i] = _nodeArray[_numNodes - 1];
            if((Integer)_nodeArray[i] > parentIdx(i)){
                bubbleUp((Integer)_nodeArray[i]);
            }
            else{
                trickleDown((Integer)_nodeArray[i]);
            }

        }
        else{
            throw new NoSuchElementException();
        }


        _numNodes--;
    }

}

: случаются при типизации (целое число).Я могу опубликовать весь свой код, если вы хотите, чтобы я, но я думаю, что этого достаточно.

1 Ответ

2 голосов
/ 30 августа 2011

Вам действительно не нужно много делать - это практически правильно, как есть. Просто снимите явное приведение и используйте compareTo вместо >:

public void remove(T o) {
    for(int i = 0; i < _nodeArray.length; i++){
        if(_nodeArray[i].equals(o)){
            _nodeArray[i] = _nodeArray[_numNodes - 1];
            if(_nodeArray[i].compareTo(parentIdx(i)) > 0){
                bubbleUp(_nodeArray[i]);
            }
            else{
                trickleDown(_nodeArray[i]);
            }

        }
        else{
            throw new NoSuchElementException();
        }


        _numNodes--;
    }
}
...