有許多緣由促成了泛型的出現,而最引人注意的一個緣由,就是爲了建立容器類。java
/** * 泛型類 */ public class Store<T> { T value; public Store(T value) { this.value = value; } static public void main(String[] args) { Store<String> store = new Store<String>("DARKGEM"); System.out.println(store.getValue()); } public T getValue() { return value; } public void setValue(T value) { this.value = value; } }
public class App { public static void main(String[] args) { Store<String> store = new Store<String>() { String val; public String get() { return val; } public void set(String val) { this.val = val; } }; store.set("DARKGEM"); System.out.println(store.get()); } /** * 泛型接口 */ public interface Store<T> { T get(); void set(T val); } }
public class App { /** * 泛型方法 */ static <T> String transform(T val) { return String.valueOf(val); } static public void main(String[] args) { System.out.println("AAA"); } }
import java.util.LinkedList; import java.util.List; public class App { public static void main(String[] args) { //compile pass Abs abs = new Impl(); //compile fail List<Abs> fail = new LinkedList<Impl>(); //compile pass List<? extends Abs> pass = new LinkedList<Impl>(); } /** * 抽象 */ static abstract class Abs { } /** * 實際 */ static class Impl extends Abs { } }
經過 <? extends Abs>
能夠實現父抽象類容器
引用子實現類容器
這種狀況。segmentfault
泛型的概念是針對編譯器
的,在編譯處理後,泛型信息均可以被去除,而後使用Object代替
,由於Object是全部對象的Root。this
泛型在必定程度上,能夠美化咱們的code,在編譯時就能夠肯定一些錯誤。可是也不要濫用
泛型特性。code