摘要:在類上定義的泛型,在類的方法中也可以使用把泛型定義在類上類型變量定義在類上方法中也可以使用用戶想要使用哪種類型,就在創(chuàng)建的時候指定類型。使用的時候,該類就會自動轉(zhuǎn)換成用戶想要使用的類型了。
一、什么是泛型?
Java泛型設(shè)計(jì)原則:只要在編譯時期沒有出現(xiàn)警告,那么運(yùn)行時期就不會出現(xiàn)ClassCastException異常.
泛型:把類型明確的工作推遲到創(chuàng)建對象或調(diào)用方法的時候才去明確的特殊的類型
參數(shù)化類型:
ArrayList中的E稱為類型參數(shù)變量 ArrayList
中的Integer稱為實(shí)際類型參數(shù) 整個稱為ArrayList
泛型類型 整個ArrayList
稱為參數(shù)化的類型ParameterizedType
二、為什么需要泛型
有了泛型以后:
代碼更加簡潔【不用強(qiáng)制轉(zhuǎn)換】
程序更加健壯【只要編譯時期沒有警告,那么運(yùn)行時期就不會出現(xiàn)ClassCastException異?!?/p>
可讀性和穩(wěn)定性【在編寫集合的時候,就限定了類型】
在創(chuàng)建集合的時候,我們明確了集合的類型了,所以我們可以使用增強(qiáng)for來遍歷集合!
//創(chuàng)建集合對象 ArrayListlist = new ArrayList<>(); list.add("hello"); list.add("world"); list.add("java"); //遍歷,由于明確了類型.我們可以增強(qiáng)for for (String s : list) { System.out.println(s); }
三、泛型基礎(chǔ)
泛型類就是把泛型定義在類上,用戶使用該類的時候,才把類型明確下來….這樣的話,用戶明確了什么類型,該類就代表著什么類型…用戶在使用的時候就不用擔(dān)心強(qiáng)轉(zhuǎn)的問題,運(yùn)行時轉(zhuǎn)換異常的問題了。
在類上定義的泛型,在類的方法中也可以使用!
/* 1:把泛型定義在類上 2:類型變量定義在類上,方法中也可以使用 */ public class ObjectTool{ 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)建對象并指定元素類型 ObjectTooltool = new ObjectTool<>(); tool.setObj(new String("鐘福成")); String s = tool.getObj(); System.out.println(s); //創(chuàng)建對象并指定元素類型 ObjectTool objectTool = new ObjectTool<>(); /** * 如果我在這個對象里傳入的是String類型的,它在編譯時期就通過不了了. */ objectTool.setObj(10); int i = objectTool.getObj(); System.out.println(i);
}
定義泛型方法….泛型是先定義后使用的
//定義泛型方法.. publicvoid show(T t) { System.out.println(t); }
用戶傳遞進(jìn)來的是什么類型,返回值就是什么類型了
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{ public abstract void show(T t); }
實(shí)現(xiàn)泛型接口的類…..
/** * 子類明確泛型類的類型參數(shù)變量: */ public class InterImpl implements Inter{ @Override public void show(String s) { System.out.println(s); } }
四、泛型的應(yīng)用
當(dāng)我們寫網(wǎng)頁的時候,常常會有多個DAO,我們要寫每次都要寫好幾個DAO,這樣會有點(diǎn)麻煩。
public abstract class BaseDao{ //模擬hibernate.... private Session session; private Class clazz; //哪個子類調(diào)的這個方法,得到的class就是子類處理的類型(非常重要) public BaseDao(){ Class clazz = this.getClass(); //拿到的是子類 ParameterizedType pt = (ParameterizedType) clazz.getGenericSuperclass(); //BaseDao 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,該實(shí)現(xiàn)類就有對應(yīng)的增刪改查的方法了。
public class CategoryDao extends BaseDao{ } BookDao public class BookDao extends BaseDao { }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/71746.html
摘要:泛型類型對象之間沒有關(guān)系,就算之間互為父子關(guān)系,也沒有任何關(guān)系。泛型類的靜態(tài)上下文中類型變量無效。不能捕獲或拋出泛型類的實(shí)例。 前言 作為一塊后端沒有太多經(jīng)驗(yàn)的年糕,下周要考試了,所以我必須得來好好復(fù)習(xí)一下我的JAVA進(jìn)階課/(ㄒoㄒ)/~~。這個學(xué)期主要是學(xué)了: 泛型 反射 線程 JDBC JAVA WEB基礎(chǔ) Servlet session&cookie 過濾器&監(jiān)聽器 泛型 ...
摘要:前言從今天開始進(jìn)入基礎(chǔ)的復(fù)習(xí),可能一個星期會有一篇的十道簡單算法,我寫博文的未必都是正確的如果有寫錯的地方請大家多多包涵并指正今天要復(fù)習(xí)的是泛型,泛型在中也是個很重要的知識點(diǎn),本文主要講解基礎(chǔ)的概念,并不是高深的知識,如果基礎(chǔ)好的同學(xué)可以當(dāng) 前言 從今天開始進(jìn)入Java基礎(chǔ)的復(fù)習(xí),可能一個星期會有一篇的,我寫博文的未必都是正確的~如果有寫錯的地方請大家多多包涵并指正~ 今天要復(fù)習(xí)的是泛...
摘要:八種基本數(shù)據(jù)類型數(shù)組定義數(shù)組元素類型數(shù)組名元素類型元素個數(shù)和數(shù)組長度元素類型數(shù)組名元素類型元素元素元素元素內(nèi)存的劃分寄存器本地方法區(qū)方法區(qū)棧內(nèi)存存儲局部變量變量所屬作用域一旦結(jié)束變量自動釋放方法進(jìn)棧局部變量屬于方法所以方法要先進(jìn)棧堆內(nèi)存存儲 八種基本數(shù)據(jù)類型 byte short int long boolean char float double JAVA數(shù)組 定義數(shù)組 元...
摘要:泛型方法可以定義在普通類和泛型類中,泛型方法可以被修飾符修飾。泛型類型變量會在編譯后被擦除,用第一個限定類型替換沒有限定類型的用替換。比如通配符類型代表任何泛型類型的類型變量是和的子類。這個類型參數(shù)有一個子類型限定,其自身又是一個泛型類型。 我的博客 轉(zhuǎn)載請注明原創(chuàng)出處。 序 之所以會想來寫泛型相關(guān)的內(nèi)容,是因?yàn)榭吹竭@樣的一段代碼: showImg(https://segment...
摘要:進(jìn)階多線程開發(fā)關(guān)鍵技術(shù)后端掘金原創(chuàng)文章,轉(zhuǎn)載請務(wù)必將下面這段話置于文章開頭處保留超鏈接。關(guān)于中間件入門教程后端掘金前言中間件 Java 開發(fā)人員最常犯的 10 個錯誤 - 后端 - 掘金一 、把數(shù)組轉(zhuǎn)成ArrayList 為了將數(shù)組轉(zhuǎn)換為ArrayList,開發(fā)者經(jīng)常... Java 9 中的 9 個新特性 - 后端 - 掘金Java 8 發(fā)布三年多之后,即將快到2017年7月下一個版...
閱讀 1571·2021-09-24 10:38
閱讀 1498·2021-09-22 15:15
閱讀 3059·2021-09-09 09:33
閱讀 905·2019-08-30 11:08
閱讀 638·2019-08-30 10:52
閱讀 1253·2019-08-30 10:52
閱讀 2345·2019-08-28 18:01
閱讀 521·2019-08-28 17:55