首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javac错误,不可转换的类型java.lang.Double

javac错误,不可转换的类型java.lang.Double
EN

Stack Overflow用户
提问于 2012-10-12 12:24:00
回答 3查看 2.4K关注 0票数 1

我在这里发现了与我非常相似的问题,但我无法在其他帖子中解决我的问题。很抱歉发了两个帖子。

我试图在我的终端上运行我的代码,但是我得到了一个javac错误,即使我的代码在Eclipse中看起来很好。

代码语言:javascript
运行
复制
      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;
      }

这是我得到的错误

代码语言:javascript
运行
复制
   MinHeap.java:40: inconvertible types
   found   : E
   required: java.lang.Double
   Double B = (Double) removedNode;
                    ^
   1 error

有什么建议吗?

有了你的所有输入,我已经改变了返回类型,它工作得很好。

代码语言:javascript
运行
复制
         public E remove() {
           E removedNode = h.get(0);
           E lastNode = h.remove(h.size() - 1);
           percolateDown(0, lastNode);

         return removedNode;
        }

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-12 12:32:46

这样就可以了

代码语言:javascript
运行
复制
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;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2012-10-12 12:27:02

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

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

代码语言:javascript
运行
复制
MinHeap<Double> minHeap = ....
....
Double removedValue = minHeap.remove();

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

票数 3
EN

Stack Overflow用户

发布于 2012-10-12 12:33:16

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12852230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档