這篇文章將為大家詳細講解有關(guān)什么是Java泛型,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
甘南網(wǎng)站建設公司創(chuàng)新互聯(lián),甘南網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為甘南近千家提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設要多少錢,請找那個售后服務好的甘南做網(wǎng)站的公司定做!
一、什么是泛型?
Java泛型設計原則:只要在編譯時期沒有出現(xiàn)警告,那么運行時期就不會出現(xiàn)ClassCastException異常.
泛型:把類型明確的工作推遲到創(chuàng)建對象或調(diào)用方法的時候才去明確的特殊的類型
參數(shù)化類型:
ArrayList<E>中的E稱為類型參數(shù)變量
ArrayList<Integer>中的Integer稱為實際類型參數(shù)
整個稱為ArrayList<E>泛型類型
整個ArrayList<Integer>稱為參數(shù)化的類型ParameterizedType
二、為什么需要泛型
有了泛型以后:
代碼更加簡潔【不用強制轉(zhuǎn)換】
程序更加健壯【只要編譯時期沒有警告,那么運行時期就不會出現(xiàn)ClassCastException異?!?/p>
可讀性和穩(wěn)定性【在編寫集合的時候,就限定了類型】
在創(chuàng)建集合的時候,我們明確了集合的類型了,所以我們可以使用增強for來遍歷集合!
//創(chuàng)建集合對象 ArrayList<String> list = new ArrayList<>(); list.add("hello"); list.add("world"); list.add("java"); //遍歷,由于明確了類型.我們可以增強for for (String s : list) { System.out.println(s); }
三、泛型基礎
泛型類就是把泛型定義在類上,用戶使用該類的時候,才把類型明確下來….這樣的話,用戶明確了什么類型,該類就代表著什么類型…用戶在使用的時候就不用擔心強轉(zhuǎn)的問題,運行時轉(zhuǎn)換異常的問題了。
在類上定義的泛型,在類的方法中也可以使用!
/* 1:把泛型定義在類上 2:類型變量定義在類上,方法中也可以使用 */ public class ObjectTool<T> { private T obj; public T getObj() { return obj; } public void setObj(T obj) { this.obj = obj; } }
用戶想要使用哪種類型,就在創(chuàng)建的時候指定類型。使用的時候,該類就會自動轉(zhuǎn)換成用戶想要使用的類型了。
public static void main(String[] args) {
//創(chuàng)建對象并指定元素類型 ObjectTool<String> tool = new ObjectTool<>(); tool.setObj(new String("鐘福成")); String s = tool.getObj(); System.out.println(s); //創(chuàng)建對象并指定元素類型 ObjectTool<Integer> objectTool = new ObjectTool<>(); /** * 如果我在這個對象里傳入的是String類型的,它在編譯時期就通過不了了. */ objectTool.setObj(10); int i = objectTool.getObj(); System.out.println(i);
}
定義泛型方法….泛型是先定義后使用的
//定義泛型方法.. public <T> void show(T t) { System.out.println(t); }
用戶傳遞進來的是什么類型,返回值就是什么類型了
public static void main(String[] args) { //創(chuàng)建對象 ObjectTool tool = new ObjectTool(); //調(diào)用方法,傳入的參數(shù)是什么類型,返回值就是什么類型 tool.show("hello"); tool.show(12); tool.show(12.5); }
子類明確泛型類的類型參數(shù)變量
/* 把泛型定義在接口上 */ public interface Inter<T> { public abstract void show(T t); }
實現(xiàn)泛型接口的類…..
/** * 子類明確泛型類的類型參數(shù)變量: */ public class InterImpl implements Inter<String> { @Override public void show(String s) { System.out.println(s); } }
四、泛型的應用
當我們寫網(wǎng)頁的時候,常常會有多個DAO,我們要寫每次都要寫好幾個DAO,這樣會有點麻煩。
public abstract class BaseDao<T> { //模擬hibernate.... private Session session; private Class clazz; //哪個子類調(diào)的這個方法,得到的class就是子類處理的類型(非常重要) public BaseDao(){ Class clazz = this.getClass(); //拿到的是子類 ParameterizedType pt = (ParameterizedType) clazz.getGenericSuperclass(); //BaseDao<Category> clazz = (Class) pt.getActualTypeArguments()[0]; System.out.println(clazz); } public void add(T t){ session.save(t); } public T find(String id){ return (T) session.get(clazz, id); } public void update(T t){ session.update(t); } public void delete(String id){ T t = (T) session.get(clazz, id); session.delete(t); } }
繼承抽象DAO,該實現(xiàn)類就有對應的增刪改查的方法了。
public class CategoryDao extends BaseDao<Category> { } BookDao public class BookDao extends BaseDao<Book> { }
關(guān)于什么是Java泛型就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
分享標題:什么是Java泛型
瀏覽地址:http://www.muchs.cn/article36/gehdsg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計公司、App開發(fā)、網(wǎng)站建設、商城網(wǎng)站、靜態(tài)網(wǎng)站、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)