日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java泛型面试也能虐暴你

發布時間:2024/1/8 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java泛型面试也能虐暴你 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java么么么——泛型

泛型是什么?

泛型就是將類型作為參數進行傳遞,當創建對象或者調用方法時才確定下具體的數據類型。并且泛型只能傳遞引用數據類型

為什么需要泛型?

在JDK5之前,對象是用Object來表示的,當要獲取具體的對象時,就得進行強制類型轉化,非常的麻煩。

比如要往一個集合Collection或者Map 中存放一個對象,存的是Object類型,例如往集合中存放了一個狗Dog對象,然后又往集合中存放了一個貓Cat類型的對象,當要從集合中get一個貓Cat對象時,就得進行類型的轉化,比較麻煩,而當用泛型之后,可以將對象的類型作為參數進行傳遞,這樣在具體要用什么對象時,就不用再進行類型轉化了。

因此總結起來,使用泛型的好處是:可以讓代碼更加簡潔,因為不用進行強制類型轉換;

讓程序更加穩健,因為使用泛型在編譯階段沒有報錯的話,在運行階段也不會報ClassCastException異常;

怎么使用泛型?

1.定義在類上的泛型 – 泛型類

將泛型定義在類上,這樣類的方法也可以使用,當具體要new對象時,用戶想要指定哪種類型,該泛型類就可以自動轉化為對應的對象類型

2.派生類的泛型

2.1子類有明確泛型的類型

子類有明確泛型的類型,在實現接口時,實現類不用定義出泛型類型

2.2.子類沒有明確泛型類型

子類沒有明確泛型的類型,在實現接口時,實現類需要定義泛型類型

3.定義在方法上的泛型 – 泛型方法

當只需要在某個方法上應用泛型時,就不用直接定義在類上,直接在方法上定義就可以了。

4.泛型類型通配符

當一個方法中要接收一個集合作為參數時,想要遍歷集合并把集合打印出來時,要想明確集合中的對象類型,

如果傳的的話,這個在集合遍歷時與這些是沒有關系的,所以Java泛型提供了類型通配符

類型通配符?可以匹配任何的Java類型。當我們使用?號通配符的時候:就只能調對象與類型無關的方法,不能調用對象與類型有關的方法。

4.1通配符上限

如果接收一個List集合,它只能操作數字類型的元素【Float、Integer、Double、Byte等數字類型都行】,如果直接使用通配符,那么該集合就不只能匹配數字了,而是任意的Java類型,因此可以設定泛型的通配符上限

例如

List<? extends Number>

4.2通配符下限

類似于通配符上限,下限傳遞的類型限定只能是某種數據類型及其它的父類。

例如:

//傳遞進來的只能是Type或Type的父類<? super Type>

注:大多數時候可以用泛型方法來代替泛型通配符

題目例子:

List< ? extends T > 和 List < ? super T > 之間有什么區別 ? ------ 這兩個 List 的聲明都是限定通配符的例子,List< ? extends T > 可以接受任何繼承自 T 的類型的 List,而List < ? super T > 可以接受任何 T 的父類構成的 List。

5.泛型的類型擦除

類型擦除:泛型只作用在編譯階段,用于限定集合的輸入類型,讓編譯器在源代碼級別上,即擋住向集合中插入非法數據。當編譯器編譯完帶有泛型的程序后,生成的class字節碼文件是不帶有泛型的,也就是說在運行階段不存在任何類型相關的信息。這樣使得程序運行的效率不會受影響,是確保能和 Java 5 之前的版本開發二進制類庫進行兼容。這個過程稱為類型擦除。

在泛型類被類型擦除的時候,之前泛型類中的類型參數部分如果沒有指定上限,如 < T > 則會被轉譯成普通的 Object 類型,如果指定了上限如 < T extends String > 則類型參數就被替換成類型上限。

List<String> list = new ArrayList<>();//類型被擦除了,保留的是類型的上限,String的上限就是ObjectList list1 = list;

泛型可以用在哪里?-- 泛型的應用

比如在做項目時,對于Dao層,我們有很多的Dao接口類要編寫,而這些Dao接口類都有 一個共同的點就是對數據進行增刪改查,因此我們就可以定義一個抽象的Dao泛型類,在里面編寫增刪改查的方法,這樣當有具體的Dao接口去繼承它時,再去傳遞具體的數據類型即可。

例如:

抽象的Dao泛型類

public abstract class BaseDao<T> {//模擬hibernate....private Session session;private Class clazz;//哪個子類調的這個方法,得到的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接口類只要繼承這個BaseDao接口,就有進行對應類型的增刪改查操作

例如:

public class BookDao extends BaseDao<Book> { //這個類型就可以進行Book的增刪改查操作 }

總結

以上是生活随笔為你收集整理的Java泛型面试也能虐暴你的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲国产精品区 | 国产精品久久久久久久9999 | 精品久久成人 | 亚洲欧美一区二区三区久久 | 国模精品视频一区二区 | 欧美精品播放 | 中文字幕123区 | 草草影院网址 | 色哟哟视频在线 | 午夜影院入口 | 一区二区三区中文字幕 | 久久久一二三区 | 国产精品无码人妻一区二区在线 | 国产日韩欧美综合 | 亚洲精品欧美日韩 | 任你操精品 | 一级黄色a视频 | 日本三级黄色录像 | 在线看片网址 | 久久精品噜噜噜成人88aⅴ | 日韩毛片基地 | 国产精品系列在线播放 | 色av色 | 成人在线视频免费观看 | 日韩制服在线 | 亚洲av不卡一区二区 | 一区二区三区四区在线 | 亚洲最大av网站 | 久久久亚洲一区二区三区 | 思思精品视频 | 亚洲乱码国产一区三区 | 91性视频 | 欧美高清一区二区 | 成人毛片18女人毛片 | 麻豆一区在线 | 女婴高潮h啪啪 | 18性xxxxx性猛交 | 亚洲人免费视频 | 国产理论视频 | 久久性 | 精品少妇人妻av一区二区 | 日本在线国产 | 亚洲激情啪啪 | 午夜宅男网 | 精品无码一区二区三区爱欲 | 国产精品嫩草影院桃色 | 天天干夜夜操 | 在线免费观看黄色小视频 | 无码国产69精品久久久久网站 | 国产r级在线观看 | 天天爽夜夜爽夜夜爽精品视频 | 富婆如狼似虎找黑人老外 | 活大器粗np高h一女多夫 | 亚洲精品一区二区三区蜜桃 | 亚洲播放器 | 欧美自拍区 | 99av视频| 日本xxx在线播放 | 在线观看99| 波多野结衣网站 | 日韩中文视频 | 免费看成人片 | 免费视频网站在线观看入口 | 少妇太爽了在线观看 | 亚洲少妇一区 | 一区二区免费播放 | 成人网在线播放 | 欧美肉丝袜videos办公室 | 国产 中文 字幕 日韩 在线 | 国产喷白浆一区二区三区 | 国产精品免费观看视频 | 久久不卡av | 伊人青青草 | 外国电影免费观看高清完整版 | 午夜一区在线 | 成人学院中文字幕 | 91国偷自产一区二区三区女王 | 国产影视一区二区 | 精品无码人妻一区二区三区 | 久久久久女 | 黄色激情毛片 | 亚洲视频一二区 | 成人 黄 色 免费播放 | 久操视频在线观看 | 亚洲欧美精品 | 黄色日本视频 | 色婷婷亚洲一区二区三区 | 热久久网站 | 久久性生活片 | 欧美日韩国产在线观看 | 欧美老熟妇又粗又大 | 韩国女同性做爰三级 | 日韩av在线免费播放 | 国产做受高潮漫动 | 老司机午夜福利视频 | 成人网视频 | 亚洲自拍偷拍综合 | 999精品视频 | 欧美最猛性xxxxx(亚洲精品) |