【问题标题】:-Xlint in eclipse-日食中的Xlint
【发布时间】:2024-01-02 01:49:01
【问题描述】:

如何在我的 Eclipse 中收到来自 O'Reilly 的名为“Java 泛型和集合”的书中的此类警告? :

% 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 中,但我不知道它们在哪里。

我没有在“问题”或“控制台”的书签中看到它们。

【问题讨论】:

  • 您将在编辑器中突出显示未经检查的警告,在 Package Navigator 中作为装饰应用,并在 Problems 中列出。

标签: java eclipse warnings


【解决方案1】:

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

使用 Eclipse IDE 时,生成的所有消息都在 Java 中的首选项 > 编译器 > 错误/警告中进行配置。

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

【讨论】: