Java 泛型、不可转换类型、类型转换、堆 d-ary
这是我的 d 进制堆的删除方法。编译时出现很多“不可转换类型”错误。另请注意,我的程序扩展了 Comparable。
public class HeapImpl12<T extends Comparable<? super T>> implements Heap12<T>
我知道我的数组不是类型对象而是 T 类型。
T[] _nodeArray = (T[]) new Comparable[DEFAULT_ARRAYSIZE];
问题:我知道一切都应该是 T 类型,但是当我编写代码时,我遇到了很多“无法将 T 类型转换为 INT 类型”的错误,所以我决定进行类型转换以使其类型相同(T)或(整数)。我现在意识到这样做是错误的,因为我收到“不可转换类型”错误。对 Java 泛型有深入了解的人请告诉我保留 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--;
}
}
错误:当我进行类型转换(整数)时发生。如果您愿意,我可以发布我的所有代码,但我认为这已经足够了。
This is my remove method for d-ary heaps. I'm getting a lot of 'inconvertible type' error when i compile. Also note that my program extends Comparable.
public class HeapImpl12<T extends Comparable<? super T>> implements Heap12<T>
I know my array is not type object but type T.
T[] _nodeArray = (T[]) new Comparable[DEFAULT_ARRAYSIZE];
Question: I understand everything should be type T, but when I was writing my code I got a lot of errors of "CAN'T CONVERT TYPE T TO TYPE INT", so i decided to typecast to make it same type (T) or (Integer). I realize now that doing this was wrong since I get "inconvertible type" error. Someone who has a high understanding on Java Generics please tell me techniques and tips to keep everything of type 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--;
}
}
errors: happen when i typecast (Integer). I can post all of my code if you want me to but i think this is enough.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您实际上不需要做太多事情——实际上就这样了。只需取出显式转换并在
>
上使用compareTo
即可:You really don't have to do much -- it's practically right as it is. Just take out the explicit casts and use
compareTo
in place on>
: