国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

36_入門泛型的基本應用

2019-11-14 22:49:17
字體:
來源:轉載
供稿:網友
36_入門泛型的基本應用
  • 了解泛型
    • ArrayList<E>類定義和ArrayList<Integer>類引用中涉及如下術語:
      • 整個稱為ArrayList<E> 泛型類型
      • ArrayList<E>中的E稱為類型變量類型參數
      • 整個ArrayList<Integer>稱為參數化的類型
      • ArrayList<Integer>中的Integer稱為類型參數的實例實際類型參數
      • ArrayList<Integer>中的<>typeof
      • ArrayList稱為原始類型
    • 參數化類型與原始類型的兼容性:
      • 參數化類型可以應用一個原始類型的對象,編譯報告警告,例如,
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"));    }}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 合水县| 南漳县| 定远县| 溧阳市| 五莲县| 东乌珠穆沁旗| 阳东县| 商都县| 定远县| 遂川县| 余庆县| 大同市| 古田县| 彝良县| 富顺县| 河北省| 麦盖提县| 家居| 乐陵市| 丰原市| 凯里市| 红安县| 彭水| 杭州市| 沂源县| 铜陵市| 宜兰县| 邳州市| 宜君县| 阿图什市| 门头沟区| 江源县| 乐清市| 黔西| 仲巴县| 江山市| 苍溪县| 门源| 丰县| 松溪县| 五河县|