JDK5.0新特性2
阿新 • • 發佈:2020-08-29
掌握Java SE的泛型原理
使用泛型集合API操縱物件資料
1.什麼是泛型:
整個稱為ArrayList<E>泛型型別
ArrayList<E>中的E稱為型別變數或型別引數
整個ArrayList<Integer>稱為引數化的型別
ArrayList<Integer>中的Integer稱為型別引數的例項或實際型別引數
ArrayList<Integer>中的<>念typeof
ArrayList稱為原始型別
2.引數化型別與原始型別的相容性:
引數化型別可以引用一個原始型別的物件,編譯報告警告,例如,Collection<String> c = new Vector;
原始型別可以引用一個引數化型別的物件,編譯報告警告,例如,Collection c = new Vector<String>();
3.如果類的例項物件中的多處都要用到同一個泛型引數,即這些地方引用的泛型型別要保持同一個實際型別時,
這時候就要採用泛型型別的方式進行定義,也就是類級別的泛型,語法格式如下:
public class GenericDao<T> {
private T field1;
public void save(T obj){}
public T getById(int id){}
}
4.類級別的泛型是根據引用該類名時指定的型別資訊來引數化型別變數的,例如,如下兩種方式都可以:
GenericDao<String> dao = null;
new genericDao<String>();
注意:
在對泛型型別進行引數化時,型別引數的例項必須是引用型別,不能是基本型別。
當一個變數被宣告為泛型時,只能被例項變數、方法和內部類呼叫,而不能被靜態變數和靜態方法呼叫。
因為靜態成員是被所有引數化的類所共享的,所以靜態成員不應該有類級別的型別引數。
public void Test4(){ List list=new ArrayList(); Student st1=new Student("tt"); Student st2=new Student("tty"); Student st3=new Student("yy"); list.add(st1); list.add(st2); list.add(st3); for (Object obj:list) { System.out.println(list); } for (Object obj:list){ System.out.println(((Student)obj).getName()); } } @Test public void Test5(){ List<Student> list=new ArrayList<Student>(); Student st=new Student(); Student st1=new Student("tt"); Student st2=new Student("tty"); Student st3=new Student("yy"); list.add(st1); list.add(st2); list.add(st3); for (Student obj:list) { System.out.println(obj.getName()); }
public class Student { private int id; private String name; private int gender;//0-女 1-男 public Student(){ } public Student(String name){ this.name=name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getGender() { return gender; } public void setGender(int gender) { this.gender = gender; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", gender=" + gender + '}'; } }
心得:
自信使我們快樂,自信使我們敢於挑戰自我,自信使我們獲得快樂,自信使我們擁有勇氣。