javac错误无法转换类型java.lang.Double

时间:2012-10-12 04:24:00

标签: java compiler-errors terminal javac

我在这里发现了非常类似的问题,但我无法解决其他帖子的问题。对不起双重发布可能......

我正在尝试在终端中运行我的代码但是我收到了一个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;
        }

谢谢!

3 个答案:

答案 0 :(得分:3)

由于MinHeap持有的元素属于E类型,因此您要删除相同类型的元素,因此remove()方法的返回类型也应为E

当你声明一个持有Double类型对象的MinHeap实例时,无论如何返回类型都会变成Double,你可以按如下方式编写它:

MinHeap<Double> minHeap = ....
....
Double removedValue = minHeap.remove();

您的代码出现编译错误,因为对于持有String对象的MinHeap没有意义,对吗?

答案 1 :(得分:0)

这应该

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;
    }
}

答案 2 :(得分:0)

我认为你的eclipse使用的是不同于命令行中可用的java版本。我猜你在eclipse中使用Java 1.7.x和某些较低版本(例如1.6.x)在命令行中。请在命令行中设置相同版本的java并检查。它的行为应该相同。

尝试使用java -version在命令行上检查java版本。我是肯定的,它的JDK 1.6或更低版本与上面的代码通过命令行和eclipse编译JDK 1.7,但是给出了JDK 1.6提到的错误。