如题,谢谢了
//: c12:E10_TypedContainer.java
//+M java E10_TypedContainer
/****************** Exercise 10 *****************
 * Create a new type of container that uses a
 * private ArrayList to hold the objects. Capture
 * the type of the first object you put in it,
 * and then allow the user to insert objects of
 * only that type from then on.
 ***********************************************/
import java.util.*;class X {
private String str = "X";
public String toString() {
return str;
}
}class Y {
private String str = "Y";
public String toString() {
return str;
}
}class Container {
private ArrayList lst= null;
public void add(Object o) {
Class type = null;
if(lst == null) {
type =o.getClass();
lst.add(o);
} else {
if(!type.isInstance(o)) {
System.out.println("not the same type!");
return;
}else {
lst.add(o);//这里异常。
}
}
}
public String toString() {
String result = "[";
Iterator it = lst.iterator();
while(it.hasNext()) {
result = result + (it.next()).toString() +",";
}
return result +"]";
}
public void cleanup() {
lst.clear();
}
}public class E10_TypedContainer {
public static void main(String[] args)
throws Exception  {
Container tc = new Container();
for(int i = 0;i<8;i++) {
tc.add(new X());//这里异常。
tc.add(new Y());
}
System.out.println(tc);
tc.cleanup();
for(int i = 0;i<8;i++) {
tc.add(new Y());
tc.add(new X());
}
System.out.println(tc);
}
}
异常:
Exception in thread "main" java.lang.NullPointerException
at Container.add(E10_TypedContainer.java:32)
at E10_TypedContainer.main(E10_TypedContainer.java:60)

解决方案 »

  1.   

    ----------------------------------------------------
    public void add(Object o) {
    Class type = null;
    if(lst == null) {
    type =o.getClass();
                                lst = new ArrayList<Object>(); //沒有初始化
    lst.add(o);
    } else {
    ----------------------------------------------------
      

  2.   

    ArrayList使用前要初始化new ArrayList();