泛型(一)
阿新 • • 發佈:2018-02-27
out print ret 包裝類 基本類型 使用 我們 urn red
面向對象的重要目標就是代碼的重用,支持這一目標的一個重要機制就是泛型。如果除去對象的基本類型外實現的方法是相同的,那麽我們就可以用泛型機制來描述這種基本的功能。
在1.5版本以前,Java並不直接支持泛型使用,泛型的實現是通過使用繼承的概念實現的。
(一)
使用Object表示泛型
public class Output { private Object storedValue; public void read(Object value){ this.storedValue = value; } public voidwrite(){ 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); } }
以上就是采用繼承實現泛型的方法,但這種方法有許多限制,接下來會講解使用接口類型表示泛型和數組類型的兼容性。
泛型(一)