Collection<String> c=new Vector();//可不可以,不就是編譯器一句話的事嗎?肯定可以,不然jdk1.4返回的集合就沒法用了
Collection c=new Vector<String>();//原來的方法接受一個集合參數,新的類型也要能傳進去
Vector<String> v=new Vector<Object>();//錯誤 不寫<Object>沒錯,寫了就是明知故犯Vector<Object> v=new Vector<String>();//也錯誤
泛型中的類型參數嚴格說明集合中裝載的數據類型是什么和可以加入什么類型的數據,記住:Collection<String>和Collection<Object>是兩個沒有轉換關系的參數化的類型。
假設Vector<String> v=new Vector<Object>();可以的話,那么以后從v中取出的對象當作Sting來用,而v實際指向的集合中可以加入任意的類型的對象;
假設Vector<Object> v=new Vector<String>();可以的話,那么以后可以向v中加入任意的類型對象,而v實際指向的集合中只能裝String類型的對象。
Vector<Integer> vectorList[]=new Vector<Integer>[10];
Vector v1=new Vector<String>();//原始類型=參數化的類型 沒錯Vector<Object> v=v1;//參數化的類型=原始類型 沒錯//沒錯,編譯器只會一行一行的掃描代碼,第一行沒錯,第二行也沒錯
泛型入門案例:
package com.itcast.day2;import java.lang.reflect.Constructor;import java.util.ArrayList;import java.util.List;/** * 泛型入門 * * @author ljl * */public class GernericTest { public static void main(String[] args) throws Exception { /** * 不使用泛型時,eclipse中的黃色警告 Multiple markers at this line - ArrayList is a * raw type. References to generic type ArrayList<E> should be * parameterized 翻譯:ArrayList是一個原始類型,參照泛型類型,ArrayList<E>應該被參數化。 */ ArrayList list = new ArrayList(); list.add(1); list.add(1L); list.add("abc"); // 運行期異常--類型轉換: java.lang.ClassCastException: java.lang.String cannot be // cast to java.lang.Integer int i = (Integer) list.get(2); /** 使用了泛型 ***/ List<String> list2 = new ArrayList<String>(); list2.add("abc"); // list2.add(1);//編譯報錯。 // list2.add(1L);//編譯報錯。 // java.lang.ClassCastException: java.lang.String cannot be cast to // java.lang.Integer // int i=(Integer)list2.get(0);//編譯報錯。 String str = list2.get(0); System.out.PRintln(str);// abc /** 反射中泛型的使用 ***/ // 01.Constructor未使用泛型,構造對象完畢之后不知道是String /**不使用泛型時,eclipse中的黃色警告 * Constructor is a raw type. References to generic type Constructor<T> should be parameterized * 翻譯:Constructor是一個原始類型,應該參照泛型類Contructor<T>來參數化. */ Constructor constructor = String.class .getConstructor(StringBuffer.class); String ss = (String) constructor.newInstance(new StringBuffer("abc")); // 02.Constructor使用了泛型,規定好構造器的類型是Stirng類型的 Constructor<String> constructor2 = String.class .getConstructor(StringBuffer.class); String ss2 = constructor2.newInstance(new StringBuffer("abcd")); }}
新聞熱點
疑難解答