我的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
编译此代码。此外,你可以从图片中取出泛型,问题仍然是相同的(即使没有泛型也不会编译)。
我的问题是:有人捍卫这不是一个错误的立场吗?
答案 0 :(得分:4)
它为我编译。
唯一的结论是,您已导入Queue
以外的java.util.Queue
类,或导入LinkedList
以外的java.util.LinkedList
或两者。
答案 1 :(得分:3)
尝试明确地做:
java.util.Queue<String> q = new java.util.LinkedList<String>();
请注意,使用package.*
导入时,它很容易覆盖(如果您有一个与您明确导入的名称相同的类或在工作包中):
来自docs:
包的编译单元c中的单一类型导入声明d 导入名为n的类型的p隐藏声明:
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.
这里有一个按需输入类型的声明,它被一个类型的导入声明所遮蔽
答案 2 :(得分:2)
必须有一些其他错误,因为compiles fine with ideone使用Java 1.6.0.31:
import java.util.*;
class QueueTest {
public static void main( String args[] ) {
Queue<String> q = new LinkedList<String>();
}
}
您的类路径上是否有另一个类,如java.util.Queue
或java.util.LinkedList
,它覆盖了JDK?