首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java泛型,不可转换类型,类型转换,堆d-ary

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

Stack Overflow用户
提问于 2011-08-30 06:33:14
回答 1查看 549关注 0票数 2

这是我的d-ary堆的remove方法。当我编译的时候,我得到了很多“不可转换类型”的错误。还要注意的是,我的程序扩展了可比较的。

代码语言:javascript
运行
复制
public class HeapImpl12<T extends Comparable<? super T>> implements Heap12<T>

我知道我的数组不是object类型,而是T类型。

代码语言:javascript
运行
复制
T[] _nodeArray = (T[]) new Comparable[DEFAULT_ARRAYSIZE]; 

问:我知道所有的东西都应该是类型T,但是当我写代码的时候,我收到了很多"CAN'T CONVERT type T TO TYPE INT“的错误,所以我决定进行类型转换,使它成为相同的类型(T)或(Integer)。我现在意识到这样做是错误的,因为我得到了“不可转换类型”错误。对Java泛型有很高理解的人,请告诉我保持T类型的所有东西的技巧和技巧。

代码语言:javascript
运行
复制
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--;
    }

}

错误:当我类型转换(整型)时发生。我可以张贴我的所有代码,如果你想我这样做,但我认为这是足够的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-30 06:47:28

您真的不需要做太多事情--它实际上是正确的。只需删除显式类型转换,并在>上就地使用compareTo

代码语言:javascript
运行
复制
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--;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7236765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档