不可转换类型java.lang.Double的javac错误
我在这里发现了与我非常相似的问题,但我无法用其他帖子解决我的问题。对不起,可能是双重邮寄 我试图在我的终端中运行我的代码,但是我得到了一个javac错误,即使我的代码在Eclipse中看起来很好不可转换类型java.lang.Double的javac错误,java,compiler-errors,terminal,javac,Java,Compiler Errors,Terminal,Javac,我在这里发现了与我非常相似的问题,但我无法用其他帖子解决我的问题。对不起,可能是双重邮寄 我试图在我的终端中运行我的代码,但是我得到了一个javac错误,即使我的代码在Eclipse中看起来很好 public class MinHeap<E extends Comparable<E>> { List<E> h = new ArrayList<E>(); ArrayList<E> array
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;
}
有什么建议吗
根据您的所有输入,我已经更改了返回类型,它工作正常
public E remove() {
E removedNode = h.get(0);
E lastNode = h.remove(h.size() - 1);
percolateDown(0, lastNode);
return removedNode;
}
谢谢 由于MinHeap持有的元素类型为
E
,因此您正在删除相同类型的元素,因此remove()
方法的返回类型也应为E
当您声明一个包含Double
type对象的MinHeap实例时,返回类型将变为Double
,您可以按如下方式编写它:
MinHeap<Double> minHeap = ....
....
Double removedValue = minHeap.remove();
MinHeap MinHeap=。。。。
....
Double removedValue=minHeap.remove();
您的代码出现编译错误,因为它对于包含字符串对象的MinHeap没有意义,对吗?应该这样做
public class MinHeap<E extends Comparable<E>> {
List<E> h = new ArrayList<E>();
ArrayList<E> arrayPostingsList = new ArrayList<E>();
// some more code
public static void main(String[] args) {
MinHeap<Double> testHeap = new MinHeap<Double>();
testHeap.add(2.3); // auto-boxing
System.out.println(testHeap.remove()); //unboxing
}
public boolean add(E e) {
return h.add(e);
}
public E remove() {
E removedNode = h.get(0);
E lastNode = h.remove(h.size() - 1);
// this seems to be the problem
return removedNode;
}
}
公共类MinHeap{
列表h=新的ArrayList();
ArrayList ArrayPostingList=新建ArrayList();
//还有代码吗
公共静态void main(字符串[]args){
MinHeap testHeap=新的MinHeap();
testHeap.add(2.3);//自动装箱
System.out.println(testHeap.remove());//取消装箱
}
公共布尔加法(E){
返回h.add(e);
}
公共E删除(){
E removedNode=h.get(0);
E lastNode=h.remove(h.size()-1);
//这似乎就是问题所在
返回removedNode;
}
}
我认为您的eclipse使用的java版本与命令行中的版本不同。我猜您在eclipse中使用的是Java1.7.x
,而在命令行中使用的是更低版本(例如1.6.x
)。请在命令行中设置相同版本的java并检查。它的行为应该是一样的
尝试使用
java-version
在命令行上检查java版本。我是肯定的,它的JDK1.6或以下版本(如上代码)可以通过命令行和eclipse使用JDK1.7进行良好编译,但给出了JDK1.6的上述错误。Double
是一个包装类,而Double
是一个基本类型。它们是不同的,如果你试图返回一个需要原语的对象,编译器就会发疯。
public class MinHeap<E extends Comparable<E>> {
List<E> h = new ArrayList<E>();
ArrayList<E> arrayPostingsList = new ArrayList<E>();
// some more code
public static void main(String[] args) {
MinHeap<Double> testHeap = new MinHeap<Double>();
testHeap.add(2.3); // auto-boxing
System.out.println(testHeap.remove()); //unboxing
}
public boolean add(E e) {
return h.add(e);
}
public E remove() {
E removedNode = h.get(0);
E lastNode = h.remove(h.size() - 1);
// this seems to be the problem
return removedNode;
}
}