java中g(shù)eneric實例詳解
一介紹:
在JavaSE1.5之前,沒有泛型的情況的下,通過對類型Object的引用來實現(xiàn)參數(shù)的“任意化”,“任意化”帶來的缺點是要做顯式的強制類型轉(zhuǎn)換,而這種轉(zhuǎn)換是要求開發(fā)者對實際參數(shù)類型可以預知的情況下進行的。對于強制類型轉(zhuǎn)換錯誤的情況,編譯器可能不提示錯誤,在運行的時候才出現(xiàn)異常,這是一個安全隱患。
泛型的好處是在編譯的時候檢查類型安全,并且所有的強制轉(zhuǎn)換都是自動和隱式的,提高代碼的重用率。
二、泛型參數(shù):
class Gen<T> { private T ob; //定義泛型成員變量 public Gen(T ob) { this.ob = ob; } public T getOb() { return ob; } public void setOb(T ob) { this.ob = ob; } public void showType() { System.out.println("T的實際類型是: " + ob.getClass().getName()); } } public class GenericParameter { public static void main(String[] args){ //定義泛型類Gen的一個Integer版本 Gen<Integer> intOb=new Gen<Integer>(100); intOb.showType(); int i= intOb.getOb(); System.out.println("value= " + i); System.out.println("----------------------------------"); //定義泛型類Gen的一個String版本 Gen<String> strOb=new Gen<String>("Hello Dylan!"); strOb.showType(); String s=strOb.getOb(); System.out.println("value= " + s); } }
output:
T的實際類型是: java.lang.Integer
value= 100
----------------------------------
T的實際類型是: java.lang.String
value= Hello Dylan!
三、泛型類:
class GenericsFoo<T> { private T x; public GenericsFoo(T x) { this.x = x; } public T getX() { return x; } public void setX(T x) { this.x = x; } } public class GenericClass { public static void main(String args[]){ GenericsFoo<String> strFoo=new GenericsFoo<String>("Hello Generics!"); GenericsFoo<double> douFoo=new GenericsFoo<double>(new double("33")); GenericsFoo<Object> objFoo=new GenericsFoo<Object>(new Object()); System.out.println("strFoo.getX="+strFoo.getX()); System.out.println("douFoo.getX="+douFoo.getX()); System.out.println("objFoo.getX="+objFoo.getX()); } }
output:
strFoo.getX=Hello Generics!
douFoo.getX=33.0
objFoo.getX=java.lang.Object@1d0fafc
四 限制泛型:
import java.util.ArrayList; import java.util.Collection; class CollectionGenFoo<T extends Collection> { private T x; public CollectionGenFoo(T x) { this.x = x; } public T getX() { return x; } public void setX(T x) { this.x = x; } } public class GenericRestrict { public static void main(String[] args) { CollectionGenFoo<ArrayList> listFoo = null; listFoo = new CollectionGenFoo<ArrayList>(new ArrayList()); CollectionGenFoo<? extends Collection> listFoo1 = null; listFoo1=new CollectionGenFoo<ArrayList>(new ArrayList()); System.out.println("實例化成功!"); } }
output:
實例化成功!
五 泛型方法:
public class GenericFunction { public <T> void f(T x) { System.out.println(x.getClass().getName()); } public static void main(String[] args) { GenericFunction ea = new GenericFunction(); ea.f(" "); ea.f(10); ea.f('a'); ea.f(ea); } }
output:
java.lang.String
java.lang.Integer
java.lang.Character
GenericFunction
-----------------------------
dylan presents.
總結(jié)
以上就是本文關(guān)于java中g(shù)eneric實例詳解的全部內(nèi)容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
Java集合之Set、HashSet、LinkedHashSet和TreeSet深度解析
這篇文章主要介紹了Java集合之Set、HashSet、LinkedHashSet和TreeSet深度解析,List是有序集合的根接口,Set是無序集合的根接口,無序也就意味著元素不重復,更嚴格地說,Set集合不包含一對元素e1和e2 ,使得e1.equals(e2) ,并且最多一個空元素,需要的朋友可以參考下2023-09-09Java8接口中引入default關(guān)鍵字的本質(zhì)原因詳析
Default方法是在java8中引入的關(guān)鍵字,也可稱為Virtual extension methods—虛擬擴展方法,這篇文章主要給大家介紹了關(guān)于Java8接口中引入default關(guān)鍵字的本質(zhì)原因,需要的朋友可以參考下2022-01-01解決springboot接入springfox-swagger2遇到的一些問題
這篇文章主要介紹了解決springboot接入springfox-swagger2遇到的一些問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07Java多線程中線程的兩種創(chuàng)建方式及比較代碼示例
這篇文章主要介紹了Java多線程中線程的兩種創(chuàng)建方式及比較代碼示例,簡單介紹了線程的概念,并行與并發(fā)等,然后通過實例代碼向大家展示了線程的創(chuàng)建,具有一定參考價值,需要的朋友可以了解下。2017-11-11