国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

Java語言基礎:泛型

發布時間:2011-3-29 20:08    發布者:1770309616
關鍵詞: Java語言基礎 , 泛型
Java語言基礎.pdf (205.39 KB)


日常開發主要是C++和Delphi,使用Java完全是為了開發Android應用。今天在看Java的泛型,有些方面感到很奇怪,先來看下面的代碼:

    class Shape {
        public void Draw() {
            System.out.println("Draw Shape");
        }
    }
    class Rect extends Shape {   
        @Override
        public void Draw() {
            System.out.println("Draw Rect");
        }
    }
    class Line extends Shape {
        @Override
        public void Draw() {
            System.out.println("Draw Line");
        }
    }
    class Drawer {
        public void DrawShape(T shape) {
            shape.Draw();
        }
    }
    Drawer是一個泛型類,DrawShape方法繪制一個圖形,從使用C++模板的經驗來看,這絕對是正確的,但Java居然出現編譯錯誤了:shape.Draw這樣調用不被允許。
    我再把代碼修改了一下:
    class Drawer {
        public void DrawShape(T shape) {
            shape.toString();
        }
    }
    這樣就編譯通過了,看來Java是把 T 解釋成 Object 了,有沒有辦法讓它解釋成Shape呢,又看了一下文檔,才知道要這樣寫:
    class Drawer {
        public void DrawShape(T shape) {
            shape.Draw();
        }
    }
    原來類型參加也可以指定繼承的,如果是這樣,那和不用泛型的代碼有什么區別呢:    class Drawer {
        public void DrawShape(Shape shape) {
            shape.Draw();
        }
    }
    看來Java的泛型和C++的模板有很大的區別,Java的泛型更多的是用于容器,并且在我看來,它的最大作用是省去類型轉換的操作,并且在編譯期檢查一下類型是否正確,傳統容器類可能要這樣寫:
     List intList = new ArrayList();
     intList.add(new Integer(10));
     Integer i = (Integer)intList.get(0);
有了泛型以后可以改成這樣寫:
     List intList = new ArrayList();
     intList.add(new Integer(10));
     Integer i = intList.get(0);

    我還注意到泛型參數不能是基本類型,只能是對象,這跟C++的模板差距又進一步拉大了。感覺Java泛型的作用并不是很大,但又搞得很復雜,比如通配符這種東西,先看下面的代碼:
    private static void PrintList(List list) {
        for (Object o: list) {
            System.out.println(o.toString());
        }
    }
    public static void DoTest() {
         List intList = new ArrayList();
         intList.add(new Rect());
         intList.add(new Rect());
         intList.add(new Rect());
         PrintList(intList);
    }
    PrintList這一句編譯不過,因為List與List不兼容,怎么改呢,用通配符:
    private static void PrintList(List list) {
        for (Object o: list) {
            System.out.println(o.toString());
        }
    }
    List 的意思是列表的元素類型未知,但變成Object總是沒有問題的,所以可以編譯通過,現在如果我想它是Shape,該怎么辦呢,用通配符再加Extends的辦法:
    class Shape {
        public String getName() {
            return "Shape";
        }
    }
    class Rect extends Shape {   
        @Override
        public String getName() {
            return "Rect";
        }
    }
    public class TestGenerics {
        private static void PrintList(List list) {
            for (Shape s: list) {
                System.out.println(s.getName());
            }
        }
        public static void DoTest() {
             List intList = new ArrayList();
             intList.add(new Rect());
             intList.add(new Rect());
             intList.add(new Rect());
             PrintList(intList);
        }
    }
    看看List list,我已經快被搞暈了,它的意思是List的項必須是Shape或繼承自Shape,搞了一圈又回到使用多態就可以解決問題了。
    但這個用法又帶來了一些限制,就是List list中的list是不能增加刪除元素的,比如:  
    private static void PrintList(List list) {
        for (Shape s: list) {
            System.out.println(s.getName());
        }
        list.add(new Line());
    }
    list.add(new Line())這句編不過,因為帶有通配符的集合類,根本不能確定它的元素是什么類型。
    個人覺得Java不要泛型的好,因為沒有一定要用它的理由啊,它只可以幫你自動轉換和檢查一下類型,但它所帶來的語法復雜性,其實是得不償失的。
本文地址:http://m.qingdxww.cn/thread-60392-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點宏來節省時間和空間
  • Dev Tool Bits——使用DVRT協議查看項目中的數據
  • Dev Tool Bits——使用MPLAB® Data Visualizer進行功率監視
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久91久久91精品免费观看 | 97国产成人精品免费视频 | 久久精品国产影库免费看 | 欧洲视频一区 | 男女做性免费视频软件 | 天天天操操操 | 亚洲第一欧美 | 欧美激情一区二区三区视频高清 | 四虎精品成人免费永久 | 国产精品青青青高清在线观看 | 天堂网2018 | 亚洲毛片在线看 | 色久天| 麻豆国产精品入口免费观看 | 国产一区二区福利久久 | 在线成人精品国产区免费 | 日韩国产成人精品视频 | 亚洲毛片免费视频 | www国产精品com | 国产福利2021最新在线观看 | 夜夜操美女 | 996热在线视频 | 欧美日韩精品乱国产 | 免费看一级毛片 | 两个人在线观看视频bd | 毛片基地免费视频a | 一级女人18片毛片免费视频 | 国产真实乱偷人视频 | 天美传媒精品 | 四虎在线视频 | 羞羞视频在线免费观看 | 国产a国产片国产 | 亚洲另类在线视频 | 国产精品盗摄一区二区在线 | 热久久99影院 | 日韩男女视频 | 四虎www成人影院免费观看 | 成人在线网址 | 操操操综合网 | 99re视频精品全部免费 | 99热在线看|