-Eclipse 中的 Xlint

-Xlint in eclipse

我该怎么做才能在我的 Eclipse 中收到 O'Reilly 的 "Java Generics and Collections" 书中的警告? :

% javac -Xlint:unchecked l/Stack.java l/ArrayStack.java \
%    l/Stacks.java l/Client.java
l/ArrayStack.java:6: warning: [unchecked] unchecked call to add(E)
as a member of the raw type java.util.List
    public void push(Object elt) list.add(elt);
                                          ^
1 warning

这是抛出以上警告的完整代码:

l/Stack.java:
interface Stack {
   public boolean empty();
   public void push(Object elt);
   public Object pop();
}

l/ArrayStack.java:
import java.util.*;
class ArrayStack implements Stack {
   private List list;
   public ArrayStack() { list = new ArrayList(); }
   public boolean empty() { return list.size() == 0; }
   public void push(Object elt) { list.add(elt); }
   public Object pop() {
      Object elt = list.remove(list.size()-1);
      return elt;
   }
   public String toString() { return "stack"+list.toString(); }
}

l/Stacks.java:
class Stacks {
   public static Stack reverse(Stack in) {
      Stack out = new ArrayStack();
      while (!in.empty()) {
         Object elt = in.pop();
         out.push(elt);
      }
      return out;
   }
}

l/Client.java:
class Client {
   public static void main(String[] args) {
      Stack stack = new ArrayStack();
      for (int i = 0; i<4; i++) stack.push(new Integer(i));
      assert stack.toString().equals("stack[0, 1, 2, 3]");
      int top = ((Integer)stack.pop()).intValue();
      assert top == 3 && stack.toString().equals("stack[0, 1, 2]");
      Stack reverse = Stacks.reverse(stack);
      assert stack.empty();
      assert reverse.toString().equals("stack[2, 1, 0]");
   }
}

顺便说一下,当我在 Eclipse 中编译这段代码时,我有不止 1 个警告。

可能 % javac -Xlint:unchecked ... 类型的警告显示在 Eclipse 中,但我不知道它们在哪里。

我在书签中没有看到它们 "Problems" 或 "Console"。

Eclipse 有自己的 Java 编译器并且不使用 'javac' 因此它不会产生相同的警告消息。

使用 Eclipse IDE 时,所有生成的消息都在 Java > 编译器 > Errors/Warnings.

中的首选项中配置

您还可以从命令行使用 Eclipse 编译器。给出的选项是 here