国产毛片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://www.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
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 大尹成香蕉| 色欧美综合 | 免费一级特黄3大片视频 | 91午夜精品午夜剧场 | 草逼com| 羞羞人成午夜爽爽影院 | 色网站免费观看 | www.中文字幕在线 | 欧美成人激情在线 | 制服师生一区二区三区在线 | 99在线热播 | 91免费在线观看 | 欧美日韩亚洲综合在线一区二区 | 国内精品一区二区三区αv 国内精品一区二区三区 | 亚洲成年网站在线观看 | 中文字幕麻豆 | 美女久久久久久久久久久 | 本道久久综合88全国最大色 | 在线观看亚洲视频 | 男女性高爱潮是免费 | 撩草网| 国产成人免费a在线资源 | 久久久精品一区二区三区 | 不卡中文字幕在线观看 | 福利 网红 精品 免费 高清 | 欧美综合天天夜夜久久 | 久草com| xxxxx亚洲 | 国产精品毛片高清在线完整版 | 欧美精品在线免费 | 美日韩一区二区 | 夜夜噜噜噜 | 网友自拍区一区二区三区 | 亚洲综合香蕉 | 20201精品极品国产色在线 | 国内激情自拍 | 久久久久久国产精品免费免 | 亚洲综合偷自成人网第页 | 欧美日韩三级 | 中文字幕日韩在线观看 | 国产在线观看午夜不卡 |