從頭認識java-13.1 泛型與容器(容器的演變)
這一章節我們來討論一下泛型與容器,準確來說是由於容器的需求而產生泛型的需求。
我們平常在編程的時候,大部分都是用了容器來裝載對象,我們來看一下容器的演變。
1.普通容器
package com.ray.ch11;public class Test {public static void main(String[] args) {Holder holder = new Holder(new RealObject());RealObject realObject = holder.getRealObject();}}class RealObject {static {System.out.println(loading object);}}class Holder {private RealObject realObject;public Holder(RealObject realObject) {this.realObject = realObject;}public RealObject getRealObject() {return realObject;}}
上面的代碼展示了能夠裝載RealObject這個類型對象的 容器,但是由於只是能夠儲存單一類型,因此實用性比較差。
2.萬能容器
package com.ray.ch11;public class Test {public static void main(String[] args) {Holder holder = new Holder(new RealObject());RealObject realObject = (RealObject) holder.getObject();Holder holder2 = new Holder(new RealObject2());RealObject2 realObject2 = (RealObject2) holder2.getObject();}}class RealObject {static {System.out.println(loading object);}}class RealObject2 {static {System.out.println(loading object2);}}class Holder {private Object object;public Holder(Object object) {this.object = object;}public Object getObject() {return object;}}
我們修改一下上面的代碼,把holder裝載的類型改成Object,這個時候Holder可以裝載任何的類型對象的容器。
雖然上面的容器是萬能,但是一般編程的時候是不會用到各種類型的對象,大部分的時候是儲存單一類型的對象,而且,在使用的過程中需要強制轉換,這個是一個大問題,因為不一定知道需要轉換對象的類型,因此,需要引入泛型。
3.泛型容器
package com.ray.ch11;public class Test {public static void main(String[] args) {Holder holder = new Holder(new RealObject());RealObject realObject = (RealObject) holder.getObject();Holder holder2 = new Holder(new RealObject2());RealObject2 realObject2 = (RealObject2) holder2.getObject();}}class RealObject {static {System.out.println(loading object);}}class RealObject2 {static {System.out.println(loading object2);}}class Holder {private T object;public Holder(T object) {this.object = object;}public Object getObject() {return object;}}
我們再次修改容器,引入泛型特性,這個時候容器基本滿足需求,而且在編譯的過程中也可以進行類型檢查,保證類型的正確性。
4.泛型的核心概念
就是我告訴編譯器我想使用什麼類型的容器,然後編譯器就會根據需要處理一些細節(例如:類型檢測)
總結:這一章節主要講述容器的演變,以及泛型與容器的關係。