我在这里发现了与我的问题非常相似的问题,但我无法通过其他帖子解决我的问题。抱歉重复发布可能...
我试图在我的终端中运行我的代码,但我收到了一个 javac 错误,即使我的代码在 Eclipse 中似乎没问题。
public class MinHeap<E extends Comparable<E>> {
List<E> h = new ArrayList<E>();
ArrayList<E> arrayPostingsList = new ArrayList<E>();
//some more code
public double remove() {
E removedNode = h.get(0);
E lastNode = h.remove(h.size() - 1);
percolateDown(0, lastNode);
//this seems to be the problem
return (Double) removedNode;
}
这是我得到的错误
MinHeap.java:40: inconvertible types
found : E
required: java.lang.Double
Double B = (Double) removedNode;
^
1 error
有什么建议吗?
根据您的所有输入,我已经更改了返回类型并且它工作正常。
public E remove() {
E removedNode = h.get(0);
E lastNode = h.remove(h.size() - 1);
percolateDown(0, lastNode);
return removedNode;
}
谢谢!
最佳答案
由于 MinHeap 持有的元素是 E
类型,您要删除相同类型的元素,因此 remove()
方法的返回类型也应该是 E
。
当你声明一个 MinHeap 实例持有 Double
类型的对象时,返回类型无论如何都会变成 Double
,你可以这样写:
MinHeap<Double> minHeap = ....
....
Double removedValue = minHeap.remove();
您的代码给出了编译错误,因为它对于保存 String 对象的 MinHeap 没有意义,对吗?
关于javac 错误不可转换类型 java.lang.Double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12852230/