【问题标题】:Java: compilation error with the command promptJava:使用命令提示符编译错误
【发布时间】:2014-04-15 12:22:49
【问题描述】:
import java.util.*;

public class Lab8 {
          public static void main(String str[]) {
                    List list=new ArrayList();
                    list.add("sri");
                    list.add("Nivas");
                    list.add("Dande");
                    list.add("JLC");
                    System.out.println(list);

                   Iterator it=list.iterator();
                   while(it.hasNext()) {
                               Object obj=it.next();
                               System.out.println(obj);
                               if(obj.equals("JLC")) 
                               it.remove();
                    }
                    System.out.println(list);
          }
}

问题:

在使用 IDE 编译上述代码时,它工作得很好,但是当我编译它时
使用命令提示符,编译器会抛出错误:

 error: incompatible types
        Object obj=it.next();
                      ^
  required: Object
  found:    java.lang.Object

为什么我在命令提示符下而不是在 IDE 中收到此错误?

【问题讨论】:

  • public static void main(String str[]) { 可以改成默认的public static void main(String[] args) 吗?
  • 你有另一个名为Object的类吗?其他可能性包括损坏的类路径。
  • 当你用命令提示符编译它时,你能告诉我们你正在使用的确切命令吗?
  • 我也怀疑类型安全存在问题。尝试使用泛型。 ArrayList list = new ArrayList(); ... 字符串 str = it.next();等
  • 我的假设是可证伪的; java.lang.Object obj=it.next(); 工作吗?如果是这样,您还有另一个名为 Object 的类。

标签: java arraylist collections iterator


【解决方案1】:

我尝试在我的系统上运行您的代码,但在我的命令提示符(Windows)中出现了不同的错误。

Note: Lab8.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

好吧,也许我们的系统处理这类问题的方式有点不同,但您的代码的问题是缺少泛型。您正在将 String 对象添加到列表中,因此您应该这样指定它。如果没有具体说明,您可以添加字符串、整数和其他内容,并且您对 List 中的对象执行的后续操作并不总能保证有效(在这种情况下,问题不大,因为你只是打印出来的东西,但尽管如此,JVM 仍然会在编译你的代码之前警告你)。

给你。请注意使用尖括号 来更严格地指定类型(在 Java 等静态类型语言中是一种很好的做法)。

import java.util.ArrayList;
import java.util.Iterator;

public class Lab8 {
    public static void main(String str[]) {
        ArrayList<String> list=new ArrayList<String>();
        list.add("sri");
        list.add("Nivas");
        list.add("Dande");
        list.add("JLC");
        System.out.println(list);

        Iterator<String> it=list.iterator();
        while(it.hasNext()) {
            Object obj=it.next();
            System.out.println(obj);
            if(obj.equals("JLC")) 
                it.remove();
        }
        System.out.println(list);
    }
}

Eclipse 允许构建和运行您的旧代码,但尝试在命令行中编译会显示编译警告。为什么有区别?好吧,Eclipse 假设您已经阅读了它的编译警告(在 IDE 本身中显示在代码的左侧,带有一个小灯泡符号),因此如果您愿意,可以构建和运行程序。命令行中没有这样的功能,所以他们必须给你一些明确的警告信息。

无论如何,我希望您在使用我提供的代码时不会再遇到任何错误。如果您仍然有错误,那么可能是另一个问题。

希望这会有所帮助。

【讨论】:

  • ,实际上,您所说的错误(警告消息)是我每次编译与 Collections 相关的程序时都会遇到的。但是,您在下面提供的代码在我的命令提示符下运行良好。非常感谢您为解决我的问题所做的努力。
  • 太好了,我很高兴能够提供帮助。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 2011-04-05
相关资源
最近更新 更多