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

歡迎訪問 生活随笔!

生活随笔

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

java

Effective Java之请不要在新代码中使用原生态类型(二十三)

發布時間:2024/2/28 java 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Effective Java之请不要在新代码中使用原生态类型(二十三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.泛型與原生態類型的概念

泛型就是帶一個或多個類型參數E的類或者接口,而原生態類型是不帶任何實際類型的泛型,例如List是原生態類型,List < String >或者List< E >是泛型。

2.泛型的作用

泛型是在jdk1.5之后添加的。

舉個例子:

public class test {public static void main(String[] args) {ArrayList list = new ArrayList();list.add(new Integer(2));String s = (String) list.get(0);} }

就會在運行時拋出

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Stringat wqeqw.test.main(test.java:10)

然而添加了泛型

public class test {public static void main(String[] args) {ArrayList<String> list = new ArrayList();list.add(new Integer(2));//不用顯式聲明類型轉換String s = list.get(0);} }

就會在編譯時拋出

The method add(String) in the type ArrayList<String> is not applicable for the arguments (Integer)

而且不用顯式聲明類型轉換。

總結:泛型的作用是將jdk1.5以前在運行期間容易發生問題的強制類型轉換問題提前到編譯期間檢查

3.List<Object>和List的區別

先看一個例子:

public class test2 {public static void main(String[] args) {List<String>lists= new ArrayList<String>();test2.add(lists, 123);String string = lists.get(0);}public static void add(List list,Object o) {list.add(o);} }

這里依然會發生強制轉換的問題,原因是List< String >是List的子類,借此,可以通過多態這種小把戲,能讓List< String >做出“出格”的行為。

而List< String >并不是List< Object >的子類,可以在編譯期間就檢查,防止做出小把戲。

//將List換成List<Object> public static void add(List<Object> list,Object o) {list.add(o);}

就會在編譯期間發現小把戲:

The method add(List<Object>, Object) in the type test2 is not applicable for the arguments (List<String>, int)

總結:List原生類型避免了類型檢查,失去安全性,后者明確告訴編譯器能夠持有任何類型的對象

4.List<?>和List的區別

?是無限制通配符類型
下面來看一個例子:

public class test3 {public static void main(String[] args) {Set<String>sets1= new HashSet<String>();test3.add(sets1);test3.add2(sets1);}public static void add(Set s) {s.add(1);}//The method add(capture#1-of ?) in the type Set<capture#1-of ?> is not applicable for the arguments (int)public static void add2(Set<?> s) {s.add(1);} }

這里在List< String >中添加Integer元素,add2方法出現編譯錯誤。

這里實際上耍的小把戲,跟上面的例子一樣,List< ? >在這里做的事情是不能將任意元素(除了null)添加到List< ? >中,這就杜絕了小把戲的出現。

但是這樣的編譯錯誤讓人無法接受,無法將任意元素添加到List< ? >中,那要他有何用,于是有限制的通配符在這里就派上了用場。

總結:這里List< ? >無限制通配符的作用僅僅是防止強制類型轉換問題的發生,并沒有實際的作用。

5.適合原生態類型的情況

1.規范中要求:在類文字中必須用原生態類型List
比如List.class
而不能List< String >.class

2.由于泛型類型在運行時是可以擦除的,所以在xx instanceof List這樣的語句中是沒有問題的,變成xx instanceof List<?>反而是多余的。

總之,原生態類型只是為了與引入泛型之前的遺留代碼進行兼容而提供的,除了類文字,instance兩種情況,否則不要在新代碼中國使用原生態類型。

總結

以上是生活随笔為你收集整理的Effective Java之请不要在新代码中使用原生态类型(二十三)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久黄色网址 | 97视频久久久 | 中文字幕中文字幕 | 国产精品亚洲天堂 | 亚洲久久久久 | 肥臀av| 成人av片在线观看 | 日本一区二区三区精品视频 | 久久精品无码毛片 | 97精品视频在线观看 | 成人av免费网址 | 久久精品国产99精品国产亚洲性色 | av网站免费看| 日本a∨视频 | 夏晴子在线| 伊人久久艹 | 曰韩一级片 | 欧美日韩在线视频免费观看 | 国产乱码精品一区二区三区忘忧草 | av在线不卡观看 | 亚洲人xxx| 91免费视频黄 | 99伊人 | 亚洲av永久无码精品一区二区国产 | 66亚洲一卡2卡新区成片发布 | 精品国产91久久久久久 | 一本久道久久 | 人与禽一级全黄 | 青青草精品 | 日韩成人一区 | 成人黄色在线免费观看 | www.自拍| 国产白丝在线观看 | 天天舔天天摸 | 每日在线观看av | 日本激情一区二区三区 | 短篇山村男同肉耽h | 黄色三极片 | 黄瓜视频在线播放 | 国产精品入口a级 | 日韩欧美国产精品综合嫩v 国产小毛片 | 国产精品19乱码一区二区三区 | 国产女主播喷水高潮网红在线 | 无码人妻av免费一区二区三区 | 国产在线18 | 奇米777第四色 | 久久午夜场 | 色男人av | 爱插视频 | 一区二区三区黄色录像 | 成年人在线免费观看视频网站 | 国产激情综合五月久久 | www青青草 | 国产一区二区免费电影 | 大尺度网站在线观看 | 国产精品免费无遮挡无码永久视频 | 123成人网 | 久视频在线 | 日韩在线第一 | 国产精品二三区 | 男朋友是消防员第一季 | 国产裸体视频网站 | 久久精品无码一区二区三区 | 色狠久| 成人国产精品免费 | 成年人晚上看的视频 | 国产又粗又猛又爽69xx | 亚洲黄色成人网 | 娇妻被肉到高潮流白浆 | 亚洲av无码一区二区三区在线播放 | 久久精品久久精品久久 | 韩国伦理大片 | 在线观看69 | 国产成人午夜精华液 | 欧美黑人三级 | 亚洲av日韩av永久无码下载 | 精品91自产拍在线观看二区 | 在线色资源 | 国产在线一二三区 | 欧美久久久久久久 | 亚洲欧美一区在线 | 一级毛片aa | 环太平洋3:泰坦崛起 | 欧美日韩中字 | 女优色图 | 欧美xxxx69| 碰碰色 | 精品国产视频一区二区三区 | 999久久久 | 影音先锋每日资源 | 野花国产精品入口 | 爱情岛亚洲品质自拍极速福利网站 | 91视频高清| 日本免费网站视频 | 激情视频久久 | 国产99久久久国产精品 | 熟妇大屁股一区二区三区视频 | 亚洲精品免费在线观看视频 | 青青五月天 |