Java泛型,不可转换类型,类型转换,堆d-ary

时间:2011-08-29 22:33:14

标签: java generics heap comparable casting

这是我对d-ary堆的删除方法。我编译时遇到了很多“不可逆类型”的错误。另请注意,我的程序扩展了Comparable。

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

我知道我的数组不是类型对象,而是键入T.

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

问题:我理解一切都应该是T型,但是当我编写代码时,我遇到了很多“CAN NOT CONVERT TYPE T TO TYPE INT”的错误,所以我决定使用类型转换为类型( T)或(整数)。我现在意识到这样做是错误的,因为我得到“不可转换的类型”错误。对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 个答案:

答案 0 :(得分:2)

你真的不需要做太多 - 它实际上是正确的。只需取出明确的演员表并在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--;
    }
}