Java编译器意外出现“不兼容类型”错误

4

我的Java编译器javac 1.6.0_37在编译以下小程序时失败:

import java.util.*;

public class QueueTest {
    public static void main( String args[] ) {
        Queue<String> q = new LinkedList<String>();
    }
}

错误信息如下:
QueueTest.java:5: incompatible types
found   : java.util.LinkedList<java.lang.String>
required: Queue<java.lang.String>
        Queue<String> q = new LinkedList<String>();
                          ^
1 error

根据文档,LinkedList<E>实现了Queue<E>,因此应该可以编译。我已经使用javac 1.5.0_08成功编译了这段代码。另外,如果将泛型排除在外,问题仍然存在(即使没有泛型,它也无法编译)。
我的问题是:有人认为这不是一个bug吗?

5
你尝试过显式地使用java.util.Queue<String> q = new java.util.LinkedList<String>();吗?也许你当前的包中有其他类似Queue<T>的类,它可能会搞乱事情。 - amit
2
你使用了哪种类型的“队列”对象?你有自己实现的“队列”类吗?从文档中,我看不出为什么这不会起作用。 - Makoto
4
注意,所需类型为Queue<java.lang.String>,而不是java.util.Queue<java.lang.String>。请从类路径中删除在默认包中的Queue类。并且永远不要使用默认包。 - JB Nizet
刚试了一下,它可以工作!不过,我不确定是什么搞乱了事情。我会尝试打印类的名称。谢谢Amit! - naitoon
实际上,我在编译使用Java 7 update 67可以编译的代码时遇到了问题,这是在Java 8 update 20上发生的。我的临时解决方法是回到7。 - Jason D
3个回答

4

代码在我这里编译没问题。

唯一的结论是您导入了除java.util.Queue之外的Queue类,或者导入了除java.util.LinkedList之外的LinkedList,或者两种情况都有。


3
尝试明确地执行以下操作:
java.util.Queue<String> q = new java.util.LinkedList<String>();

请注意,在使用package.*导入时,如果您的类与明确导入或工作包中具有相同名称,则容易被覆盖:
来自文档

A single-type-import declaration d in a compilation unit c of package p that imports a type named n shadows the declarations of:

any top level type named n declared in another compilation unit of p.
any type named n imported by a type-import-on-demand declaration in c.
any type named n imported by a static-import-on-demand declaration in c.
您在此的是一种类型导入请求,这种请求被一个单独的类型导入请求所遮蔽。

好的,我现在明白了:在我的扩展目录中,我找到了algs4.jar和stdlib.jar,它们是Sedgewick算法课程的库。我将它们删除后,现在一切都正常了。您关于使用*导入的评论也解决了我之前遇到的其他问题。谢谢amit。 - naitoon

2

可能存在其他错误,因为使用Java 1.6.0.31 在ideone上编译通过:

import java.util.*;

class QueueTest {
    public static void main( String args[] ) {
        Queue<String> q = new LinkedList<String>();
    }
}

你的类路径上是否有另一个类,例如java.util.Queuejava.util.LinkedList,它覆盖了JDK中的类?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接