我写了一个非常简单的java堆栈操作程序。我正在 OS X 10.9.1 上使用 Java(TM) SE 运行时环境。我尝试过 JDK build 1.7.0_13-b20 和 build 1.7.0_51-b13,两者都不适合我。我只是想测试 java Stack 类。我没有私有(private)堆栈实现。并且 $CLASSPATH 环境变量设置为空。
我在 Windows (Win 8.1) 上使用 JDK 1.7.0_25 测试了相同的程序。效果很好。
import java.util.*;
public class MyStackTest
{
public static void main(String[] args){
Stack<Integer> mys = new Stack<Integer>();
mys.push(5);
while ( ! mys.empty() ) {
System.out.println(mys.peek());
mys.pop();
}
}
}
但是,在使用 javac 1.7.0_13 编译时,出现“找不到符号”错误:
$ javac MyStackTest.java -Xlint
MyStackTest.java:9: error: cannot find symbol
while ( ! mys.empty() ) {
^
symbol: method empty()
location: variable mys of type Stack<Integer>
1 error
我发现如果我将导入语句更改为
import java.util.Stack
程序编译良好。为什么“import java.util.”会导致问题?如何判断 java.util. 中的哪个类导致了问题?
谢谢!
最佳答案
您可能在与 MyStackTest
类相同的包中拥有 Stack
实现(在本例中为默认包名称)。注释掉 new Stack
之后的所有内容并打印出类类型。如果它不是 java.util.Stack
那么您就找到了答案。
import java.util.*;
public class MyStackTest
{
public static void main(String[] args){
Stack<Integer> mys = new Stack<Integer>();
System.out.println(mys.getClass());
}
}
另一种可能性是 mys.empty()
中包含非 UTF8 字符。尝试删除该行并再次手动输入。
关于OS X 10.9.1 上的 java "import java.util.*"编译失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21127253/