1. 程式人生 > >泛型(一)

泛型(一)

out print ret 包裝類 基本類型 使用 我們 urn red

  面向對象的重要目標就是代碼的重用,支持這一目標的一個重要機制就是泛型。如果除去對象的基本類型外實現的方法是相同的,那麽我們就可以用泛型機制來描述這種基本的功能。

在1.5版本以前,Java並不直接支持泛型使用,泛型的實現是通過使用繼承的概念實現的。

(一)

  使用Object表示泛型

public class Output {

    private Object storedValue;
    
    public void read(Object value){
        this.storedValue = value;
    }
    
    public void
write(){ System.out.println("storedValue為:" + storedValue); } public static void main(String[] args){ Output o = new Output(); o.read("46"); o.write(); o.read(37);; o.write(); } }

  基本類型的包裝:

    我們知道基本類型是沒有超類的,所以要想實現基本類型的泛型,就要用到他們的包裝類,例如int的包裝類是Integer,八個包裝類都是不可變的,具體例子如下。

public static void main(String[] args){
        Output o = new Output();
        o.read(new Integer(37));
    }

  自動裝箱/拆箱

    上圖的代碼相對有些麻煩,因為需要調用Integer對象,Java5以後有了自動裝箱和拆箱功能。例如當一個int型要傳遞給一個需要Integer的地方,編譯器會在幕後插入一個Integer的構造器,這叫自動裝箱。當一個Integer類型要傳遞個一個需要int類型時,編譯器會自動調用intValue方法,這叫自動拆箱。根據以上內容,上述代碼可改成

public class Output {

    private Object storedValue;
    
    public void read(Object value){
        this.storedValue = value;
    }
    
    public Object write(){
        return storedValue;
    }
    
    public static void main(String[] args){
        Output o = new Output();
        o.read(37);//自動裝箱
        int value = (Integer)o.write();//自動拆箱
        System.out.println("儲存值為" + value);
    }
}

以上就是采用繼承實現泛型的方法,但這種方法有許多限制,接下來會講解使用接口類型表示泛型和數組類型的兼容性。

泛型(一)