【问题标题】:javac error inconvertible types java.lang.Doublejavac错误不可转换类型java.lang.Double
【发布时间】:2012-10-02 20:46:21
【问题描述】:

我在这里发现了与我非常相似的问题,但我无法通过其他帖子解决我的问题。抱歉,可能会重复发布...

我试图在我的终端中运行我的代码,但我得到一个 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;
        }

谢谢!

【问题讨论】:

  • Double 是一个包装类,而double 是一个原始类型。它们不一样,如果您在需要原语时尝试返回对象,编译器会发疯。

标签: java compiler-errors terminal javac


【解决方案1】:

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

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

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

您的代码给出了编译错误,因为它对于持有 String 对象的 MinHeap 没有意义,对吧?

【讨论】:

    【解决方案2】:

    应该这样做

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

    【讨论】:

      【解决方案3】:

      我认为您的 Eclipse 使用的 Java 版本与命令行中可用的不同。我猜您在 Eclipse 中使用的是 Java 1.7.x,而在命令行中使用的是一些较低版本(例如 1.6.x)。请在命令行中设置相同版本的java并检查。它的行为应该相同。

      尝试使用java -version 在命令行上检查 java 版本。我很肯定,它的 JDK 1.6 或更低版本的代码可以通过命令行和 eclipse 与 JDK 1.7 一起正常编译,但在 JDK 1.6 中会出现上述错误。

      【讨论】:

        猜你喜欢
        • 2011-06-17
        • 2018-06-11
        • 2023-01-22
        • 2017-07-01
        • 2020-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多