我从网上下载了一个简单的java示例。我正在尝试编译下面给出的代码
package ArrayList;
import java.util.ArrayList;
public class SimpleArrayListExample {
public static void main(String[] args) {
//create an ArrayList object
ArrayList<String> arrayList = new ArrayList<String>();
/*
Add elements to Arraylist using
boolean add(Object o) method. It returns true as a general behavior
of Collection.add method. The specified object is appended at the end
of the ArrayList.
*/
arrayList.add("1");
arrayList.add("2");
arrayList.add("3");
/*
Use get method of Java ArrayList class to display elements of ArrayList.
Object get(int index) returns and element at the specified index in
the ArrayList
*/
System.out.println("Getting elements of ArrayList");
System.out.println(arrayList.get(0));
System.out.println(arrayList.get(1));
System.out.println(arrayList.get(2));
}
}
我根据你的建议编辑了程序,我可以编译,我得到了类文件。
java SimpleArrayListExample.java
我想尝试使用
执行文件java -classpath . ArrayList.SimpleArrayListExample.java
线程“main”中的异常java.lang.NoClassDefFoundError
我google并发现我必须指定-classpath。
http://www.tech-recipes.com/rx/826/java-exception-in-thread-main-javalangnoclassdeffounderror/似乎无法解决问题。
答案 0 :(得分:3)
编译器警告表明集合中包含的类型尚未声明。 您可以使用泛型来消除此警告
ArrayList<String> arrayList = new ArrayList<String>();
修改强>
您的包结构存在问题。 SimpleArrayListExample
不在名为ArrayList
的目录中。修复
SimpleArrayListExample.java
移至名为ArrayList
。javac ArrayList/SimpleArrayListExample.java
java ArrayList.SimpleArrayListExample
注意包名称通常使用小写。
答案 1 :(得分:2)
您可以使用泛型来避免此警告:
public static void main(String[] args) {
//create an ArrayList object
ArrayList<String> arrayList = new ArrayList<String>();
//...
}
如果您不想使用泛型,也可以取消警告:
@SuppressWarnings("unchecked")
public static void main(String[] args) {
//...
}
答案 2 :(得分:2)
通过为您的收藏品提供通用类型来限制您的收藏,换句话说,使您的收藏品类型安全 <仅限编译时间,并且警告将消失
ArrayList<String> arrayList = new ArrayList<String>();
由于类型推断 的产生,也来自 Java 7
ArrayList<String> arrayList = new ArrayList<>();
答案 3 :(得分:2)
这不是编译错误;相反,它是编译警告。这意味着它仍然可以编译,但建议修复警告。
在这种情况下,这是因为您的ArrayList
缺少泛型类型。您应该将其声明为ArrayList<String>
,因为您只是在其中添加字符串。
答案 4 :(得分:1)
将其设为ArrayList<String>
。
这称为泛型集合,这意味着它是一个可以用类型参数化的集合,用于存储和检索该类型的对象。
因此,如果您指定希望它存储String
,编译器将知道它也返回String
。如果你没有指定任何东西,它基本上会回退到Object
,这意味着它可以存储任何东西(非标量)并检索任何东西(反过来,这会使编译器跳跃)。
答案 5 :(得分:1)
这不是错误,而是警告。
这是因为您使用的是没有泛型类型的ArrayList。
您可能想要了解有关泛型的更多信息:http://docs.oracle.com/javase/tutorial/java/generics/