在練習泛型的時候碰到的一個小問題
package com.action;
import java.util.ArrayList;
import java.util.List;
public class FanXingClass<T>{
/**
* @param args
*/
private T user1;
private T user2;
//private ArrayList<T> list;
public FanXingClass(T user1,T user2){
this.user1 = user1;
this.user2 = user2;
}
public List<T> getList(){
List<T> list = new ArrayList<T>();
list.add(user1);
list.add(user2);
return list;
}
public static void main(String[] args) {
User user1 = new User("user1","密碼1",20);
User user2 = new User("user2","密碼2",20);
FanXingClass<User> fx = new FanXingClass<User>(user1,user2);
List<User> list = fx.getList();
System.out.println("The size of list: " + list.size());
System.out.println("泛型類的類名: " + fx.user1.getClass().getName() + "\n");
for(User user:list){
System.out.println("名字: " + user.getName() + ", 密碼: " + user.getPassword() + ", 年齡: " + user.getAge());
}
}
}
在上面的簡單代碼中,其中User是一個簡單的Bean類(三個屬性值);上述代碼運行不會有任何問題,出現的結果爲右邊的圖所示的結果!
但是,如果將//private ArrayList list; 取消註釋,而getList()方法中的List list = new ArrayList();加上註釋,就會出現空指針的異常
分析:
其實,看到這個錯誤就應該明白是哪裏出問題,空指針異常:很顯然是某個類沒有被創建,不存在對應的實例對象(一般情況,不是所有的這個錯誤都是這個原因)。
後來找到兩種解決辦法:
第一種方法:就是上面所說的在getList()方法中新建一個List list = new ArrayList();的實例,當然這裏是局部變量。
第二種方法:取消成員變量的註釋private ArrayList list; 將帶參構造函數中加一個參數
private ArrayList<T> list;
public FanXingClass(T user1,T user2,List list){
this.user1 = user1;
this.user2 = user2;
this.list = (ArrayList)list;
}
對應的,在測試的時候,必須得給一個list實例
User user1 = new User("user1","密碼1",20);
User user2 = new User("user2","密碼2",20);
FanXingClass<User> fx = new FanXingClass<User>(user1,user2,new ArrayList());
知識點比較簡單,但是通過自己不斷的思考練習,會對這個有個更深的理解!當然這裏涉及到泛型,泛型的內容其實不難,但是用的非常熟練也是需要一定的練習!有錯的地方,希望有大神可以指正!