精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

理解Java泛型和通配符,這次再也忘不了了

開發 前端
如果向通配符下界集合中添加元素時,只能添加下屆類的子類。比如例子中的:list3.add(5), list3的通配符是<? super Integer>,說明該集合存放的是Integer或者Integer的子類,我只要向容器中放Integer和它的子類都是成立的。

?前言

泛型機制在項目中一直都在使用,比如在集合中ArrayList<String, String>?, Map<String,String>等,不僅如此,很多源碼中都用到了泛型機制,所以深入學習了解泛型相關機制對于源碼閱讀以及自己代碼編寫有很大的幫助。但是里面很多的機制和特性一直沒有明白,特別是通配符這塊,對于通配符上界、下界每次用每次百度,經常忘記,這次我就做一個總結,加深自己的理解。

泛型介紹和使用

泛型在類定義時不會設置類中的屬性或方法參數的具體類型,而是在類使用時(創建對象)再進行類型的定義。會在編譯期檢查類型是否錯誤, 保證程序的可讀性和安全性。

泛型定義根據實際情況可以分為泛型類和泛型方法:

泛型類

public class Point<T, U> {

private T pointX;

private U pintY;

public Point(T pointX, U pintY) {
this.pointX = pointX;
this.pintY = pintY;
}

public void showPoint() {
System.out.println(pointX);
System.out.println(pintY);
}
}
  • 類中引入類型變量,類型變量指的T, U這些,用尖括號<>括起來, 跟在類名后面。
  • 多個類型變量可以用逗號分隔。
  • 在類中的方法和返回值等地方可以使用類型變量。
  • 類型變量采用大寫形式,要求簡短,一般E表示集合的元素類型,K和V表示key和value等。
  • 泛型類使用:Point<Integer, Double>

泛型方法

public class FxMethod {

public static <T> T getMiddleNumber(T ... numbers) {
return null;
}

public <T, U> void showNumber(T t, U u) {
System.out.println("t = " + t);
System.out.println("u = " + u);;
}
}
  • 方法中引入類型變量,在返回類型前添加<>, 中間放置類型變量,多個類型變量用逗號分隔。
  • 在方法的參數和返回值等位置可以使用類型變量。
  • 泛型方法使用:Integer result = FxMethod.getMiddleNumber(2, 3) 或者 Integer result = FxMethod.<Integer>getMiddleNumber(2, 3)。

類型變量的限定

前面講解了泛型一般定義的兩種方式,其中的類型變量沒有任何限定, 這樣在導致一方面在定義泛型的時候無法使用一些API, 需要強轉,另一方面在使用的時候也容易出錯,那么如何給類型變量添加限定呢?

圖片

  • 只有通過extends關鍵字限定,不能通過super關鍵字。
  • 加了限定以后,就可以直接使用限定類相關的API。
  • 多個限定之間用&符號,比如T extends Number & Comparable。
  • 使用泛型時,只能傳入相應限定的類,比如傳入Point<String, String> 就會報編譯錯誤。

通配符使用

泛型的引入的確解決了很大問題,那它是完美的嗎?

class AnimalWrapper<T extends Animal> {
private T animal;

AnimalWrapper(T animal) {
this.animal = animal;
}

public void eat() {
animal.eat();
}

}

class Animal {
private String name;

public void eat() {
System.out.println("animal eat -----");
}
}

class Cat extends Animal {

@Override
public void eat() {
System.out.println(" cat eat -----");
}
}

定義一個AnimalWrapper?,泛型變量中限定為Animal,如果是下面的測試類,會怎么樣呢?

圖片

會編譯報錯,因為AnimalWrapper并不是AnimalWrapper的子類,不能直接傳入。為了解決個問題,我們引入了通配符,通配符一般是在方法中或者泛型類使用中用到。

圖片

AnimalWrapper<Cat>?可以作為AnimalWrapper<?extends Animal>的子類型,這就是利用通配符帶來的好處。

  • 統配符使用在集合或者方法的參數返回值中。
  • 通配符可以分為無邊界通配符、上邊界通配符和下邊界通配符。

無邊界通配符

通配符無邊界,可以傳入任何類型,沒有限制,相當于Object.

基本語法:

<?>

例子:

public static void printList1(List<?> list) {
for (Object x:list) {
System.out.println(x);
}
}

public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
printList1(list); // ok
List<String> list2 = new ArrayList<>();
list2.add("1");
printList1(list2); // ok


List<?> list3 = list;
// get只能用Object接受,
Object o = list3.get(0);
list3.add(5); // compile error
list3.add(new Object()); // compile error
}

小結:

  • 無邊界通配符相當于Object,任何類型都可以傳入,比如List<Integer> list, List<String> list2。
  • 由于?無法確定是哪種類型,所以只能使用Object類型的變量接收, 比如例子中的: Object o = list3.get(0);
  • 如果是無邊界通配符對應的集合類型,不能添加任何元素。因為無法確定集合存放數據的類型,鬼知道我們要放什么類型才合適啊。

通配符上界

通配符上界,可以限制傳入的類型必須是上界這個類或者是這個類的子類。

基本語法:

<? extends 上界> 
<? extends Number>//可以傳入的實參類型是Number或者Number的子類

例子:

public static void printList1(List<? extends Number> list) {
for (Object x:list) {
System.out.println(x);
}
}


public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
printList1(list); // ok
List<Double> list1 = new ArrayList<>();
list1.add(1.0D);
printList1(list1); // ok
List<String> list2 = new ArrayList<>();
list2.add("1");
printList1(list2); // compile error


List<? extends Number> list3 = list;
// get能用上界
Number o = list3.get(0);
// 不能add
list3.add(5); // compile error
list3.add(new Object()); // compile error

}

小結:

  • 通配符上界? extends A, 表明所有的是A的類或者子類型可以傳入,比如本例中的``Integer和Double都是Number的`子類,String不是。
  • 通配符上界? extends A,確定了類型是A或者是A的子類,那么向集合容器get獲取數據,肯定是它的上界類A,因為其他放的類都是A的子類,比如例子中的Number o = list3.get(0);
  • 如果向通配符上界集合中添加元素時,會失敗。 List<? extends A>, 說明容器可以容納的是A或者A的子類,但A的子類有很多,不確定放哪個,為了安全性,就直接不讓你add,比如例子中的list3.add(5);,5雖然是Number的子類,依然不能add。

通配符下界

通配符下界,可以限制傳入的類型必須是這個類或者是這個類的父類。

基本語法:

<? super 下界> 
<? super Integer>//代表 可以傳入的實參的類型是Integer或者Integer的父類類型

例子:

public static void printList1(List<? super Integer> list) {
for (Object x:list) {
System.out.println(x);
}
}


public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
printList1(list); // ok
List<Double> list1 = new ArrayList<>();
list1.add(1.0D);
printList1(list1); // compile error
List<String> list2 = new ArrayList<>();
list2.add("1");
printList1(list2); // compile error


List<? super Integer> list3 = list;
// 不能用下界接收
Integer o = list3.get(0); // compile error
// 能add
list3.add(5); // ok
list3.add(new Number(5)); // compile error

}
  • 通配符上界? super A, 表明所有的是A的類或者A的父類可以傳入。
  • 通配符上界? super A,確定了類型是A或者是A的父類,那么向集合容器get獲取數據,無法確定是A還是A的某個父類,所以不能get, Integer o = list3.get(0); // compile error,比如例子中用Integer接收,萬一list3中放的是Object類型,就涼涼了。
  • 如果向通配符下界集合中添加元素時,只能添加下屆類的子類。比如例子中的:list3.add(5), list3的通配符是<? super Integer>,說明該集合存放的是Integer或者Integer的子類,我只要向容器中放Integer和它的子類都是成立的。

總結

本文淺談了下泛型和通配符的使用,是自己理解的總結,希望后面的開發過程中不要再去百度了,如果哪里有問題希望大家指正。

責任編輯:武曉燕 來源: JAVA旭陽
相關推薦

2021-06-18 08:25:42

Java泛型通配符

2025-03-03 01:25:00

classnameAPI前端

2013-05-02 09:31:25

程序員

2020-11-30 06:27:35

Java泛型Object

2023-04-10 16:34:45

編程Java開發

2023-03-24 15:53:24

JavaJava 泛型開發

2009-06-16 11:32:00

Java泛型

2009-06-11 17:31:27

Java泛型

2021-07-01 06:47:30

Java泛型泛型擦除

2017-11-14 14:41:11

Java泛型IO

2009-03-17 16:22:13

Java泛型接口

2021-07-09 06:11:37

Java泛型Object類型

2011-07-10 13:45:35

JAVA泛型

2021-03-28 18:40:02

LinuxWindowsJava

2024-11-05 09:11:09

TypeScript開發者代碼

2009-08-24 10:29:39

C# 泛型

2024-04-23 08:23:36

TypeScript泛型Generics

2009-08-24 10:37:27

C# 泛型

2023-10-20 09:04:08

JavaScript語言Java

2009-09-25 10:03:51

Java泛型
點贊
收藏

51CTO技術棧公眾號

国产乱码精品一区二区三区中文| 自拍偷拍免费精品| 国产91在线视频观看| 欧美孕妇孕交| 紧缚奴在线一区二区三区| 久久大大胆人体| av在线播放网址| 成人精品电影在线| 亚洲欧美激情一区二区| 久久精品国产美女| 91丨porny丨在线中文 | 成人免费视频a| 欧美色图一区二区| 免费精品国产的网站免费观看| 精品婷婷伊人一区三区三| 日韩精品视频在线观看视频| av网站在线播放| av一二三不卡影片| 成人信息集中地欧美| 国产区一区二区三| 午夜激情一区| 中文字幕亚洲无线码在线一区| 蜜桃视频无码区在线观看| 亚洲综合av一区二区三区| 亚洲国产另类精品专区| 日韩性感在线| 日本高清中文字幕二区在线| 国产91精品一区二区麻豆网站| 国产在线不卡一卡二卡三卡四卡| 精品成人一区二区三区四区| 五月婷婷狠狠操| www.51av欧美视频| 中文字幕视频一区| 欧美在线视频二区| 婷婷色在线视频| 麻豆精品在线播放| 国产99久久精品一区二区 夜夜躁日日躁| 欧美日韩成人免费观看| 日韩欧美1区| 国产亚洲欧美aaaa| 99久久人妻精品免费二区| 日韩精品一区二区三区中文| 欧美日韩精品欧美日韩精品 | 日韩av高清在线观看| 国语自产精品视频在线看抢先版图片| 欧美激情图片小说| 国产精品精品| 俺也去精品视频在线观看| 特级西西www444人体聚色| 小说区图片区色综合区| 日韩高清有码在线| 日本五十肥熟交尾| y111111国产精品久久久| 91超碰这里只有精品国产| 激情 小说 亚洲 图片: 伦| 欧美电影网站| 日本精品一级二级| 女人另类性混交zo| 亚洲www免费| 在线免费观看一区| 国产又大又硬又粗| 成人软件在线观看| 色婷婷激情一区二区三区| 女人喷潮完整视频| 欧美无毛视频| 色嗨嗨av一区二区三区| aaa毛片在线观看| 国产精品极品美女在线观看| 欧美在线观看视频在线| 国产wwwxx| 日韩精品一级毛片在线播放| 3d动漫精品啪啪1区2区免费| 一区二区在线免费观看视频| 亚洲精品在线播放| 亚洲福利视频二区| 精品无码一区二区三区| 成人激情免费视频| 久热精品视频在线| 国产污视频在线看| 免费日韩精品中文字幕视频在线| 国产精品国产三级国产aⅴ浪潮| 最近中文字幕免费观看| 韩国三级电影一区二区| 国产精品久久7| 日韩精品视频无播放器在线看| 久久亚洲一区二区三区四区| 亚洲午夜在线观看| 暖暖在线中文免费日本| 色综合久久久网| 欧美特黄aaa| 国产一二三av| 国产一区二区三区四区五区3d| 在线电影欧美成精品| 九一精品久久久| 永久免费精品视频| 精品在线观看国产| 亚洲精品电影院| 亚洲欧洲日本一区二区三区| 国产精品jizz在线观看麻豆| 国产黄色片av| 久久嫩草精品久久久精品一| 美女在线免费视频| 久久人体大尺度| 欧美一级片在线看| 亚洲久久久久久久| 激情久久中文字幕| 国产在线视频2019最新视频| 色综合免费视频| 国产精品第13页| 红桃av在线播放| 伊人精品综合| 在线视频欧美日韩| 精品人妻在线播放| 精品一区二区三区在线观看 | www.激情小说.com| 久久精品色综合| 欧美成人激情视频免费观看| 久久人人爽人人爽人人片av免费| 成人av在线一区二区| 中文字幕一区二区三区在线乱码| 一区二区三区四区日本视频| 日韩视频永久免费| 99久久久无码国产精品不卡| 免费看亚洲片| 国产一区二区高清不卡| 亚洲一区 视频| bl在线肉h视频大尺度| 色婷婷综合久久久中文一区二区 | 久久久久九九精品影院| 国产午夜精品一区二区三区| 91浏览器在线观看| 成人亚洲精品久久久久软件| 熟妇熟女乱妇乱女网站| 成人在线免费av| 亚洲一区二区福利| 中文字幕第四页| av毛片久久久久**hd| 国产精品久久久久9999爆乳| 午夜久久av| 久久视频这里只有精品| 国产又粗又猛视频| 国产精品九色蝌蚪自拍| 国产精品拍拍拍| 国产精品羞羞答答在线观看| 热久久免费视频精品| 亚洲欧洲精品视频| 激情懂色av一区av二区av| 国产精品欧美性爱| 中文字幕一区二区精品区| 成人黄色在线播放| 黄色动漫在线| 91精品国产欧美一区二区| 成人涩涩小片视频日本| 国产综合久久久久久鬼色| 99热这里只有精品7| 精品一区二区三区免费看| 欧美另类在线观看| 精品久久久久成人码免费动漫| 亚洲免费观看高清完整版在线观看熊| 中文字幕一区二区在线观看视频 | 国产v片在线观看| 亚洲小说区图片区| 精品久久久久一区| 久久艹精品视频| 99视频一区二区| 5月婷婷6月丁香| 精品产国自在拍| 91精品久久久久久久久中文字幕 | 国产精品电影院| 中文av字幕在线观看| 亚洲精品国产首次亮相| 99视频在线播放| 激情国产在线| 亚洲一二三在线| 国产精品国产三级国产普通话对白| 国产精品久久午夜| 不卡的一区二区| 宅男噜噜噜66一区二区| 日韩激情视频| 一级欧美视频| 午夜精品久久久久久久久久久久久| 欧美理论在线观看| 欧美日韩视频一区二区| 日韩精品一区二区亚洲av性色| 国产99久久久国产精品潘金| 丰满爆乳一区二区三区| av亚洲免费| 亚洲一区二区久久久久久| 91福利在线尤物| 亚洲人成在线观看| 国产裸体无遮挡| 精品国产乱码久久久久酒店| 青娱乐国产视频| 国产成人在线视频网址| 久久久免费视频网站| 91精品综合久久久久久久久久久 | 国产伦精品一区二区免费| 888av在线| 亚洲视频 欧洲视频| 亚洲图片综合网| 久草在线在线精品观看| 大伊香蕉精品视频在线| 日本黄色精品| 国产日韩精品久久| 欧美一区二区三区婷婷| 7777精品久久久久久| 成人福利片网站| 亚洲欧美日韩爽爽影院| 性生活黄色大片| 精品污污网站免费看| 国产高潮久久久| 亚洲精品水蜜桃| jizz18女人高潮| 91香蕉视频污| 亚洲av无码久久精品色欲| 日韩高清一区二区| 欧美精品一区二区三区三州| 国产精品国产一区| 日韩av一区二区三区美女毛片| 亚洲综合影院| 91亚洲精华国产精华| 午夜av成人| 日韩免费在线观看视频| 爱情岛亚洲播放路线| 久久精品免费播放| jizz在线免费观看| 亚洲深夜福利在线| 偷拍自拍在线| 亚洲第一av网| 亚洲AV无码精品色毛片浪潮| 在线不卡免费av| 中文字幕有码视频| 在线一区二区三区四区| 亚洲天堂一区在线观看| 亚洲影视在线播放| 午夜国产福利一区二区| 国产精品久线在线观看| av网在线播放| 国产欧美一区二区精品秋霞影院 | 情事1991在线| 小视频免费在线观看| 国内精品在线一区| 欧美家庭影院| 欧美精品18videosex性欧美| 影音先锋中文在线视频| 久久香蕉频线观| 免费黄色在线网站| xxxx欧美18另类的高清| 一区二区三区视频网站 | 色呦呦在线资源| 久久久久久国产精品三级玉女聊斋 | 国产1区2区3区精品美女| 波多野结衣在线免费观看| 国产一区二区三区视频在线播放| 中文字幕一区久久| 国产一区二区三区免费观看| 免费网站在线观看黄| 国内精品久久久久影院一蜜桃| 亚洲黄色av片| 国产精品18久久久久久久网站| 性高潮久久久久久| 99久久精品国产网站| 成人免费毛片糖心| 国产女同性恋一区二区| 亚洲人与黑人屁股眼交| 亚洲男同性恋视频| 欧美日韩一级大片| 午夜日韩在线电影| 成人a v视频| 7777精品伊人久久久大香线蕉| 精品人妻一区二区三区麻豆91 | 天堂www中文在线资源| 99久久国产综合精品色伊| 久久久久亚洲av无码专区桃色| 欧美激情资源网| 91精品少妇一区二区三区蜜桃臀| 玉足女爽爽91| 中文字幕视频网| 欧美人妖巨大在线| 亚洲爆乳无码一区二区三区| 亚洲精品久久久久中文字幕欢迎你 | 日韩成人视屏| 久久久久久久久久久久久久一区| 欧美日韩性在线观看| 丰满人妻一区二区三区53号| 国产日韩欧美一区在线 | 91玉足脚交白嫩脚丫在线播放| 一区二区黄色片| 亚洲三级电影网站| 亚洲 欧美 视频| 欧美卡1卡2卡| 熟妇高潮一区二区三区| 最新亚洲国产精品| 黄色视屏在线免费观看| 国产日韩一区在线| 日本国产精品| 婷婷视频在线播放| 亚洲日本成人| 天天操精品视频| 久久免费电影网| 欧美另类视频在线观看| 色诱亚洲精品久久久久久| av免费在线不卡| 亚洲欧美中文日韩在线v日本| a毛片在线观看| 国产成人精品优优av| 97se亚洲| 中国 免费 av| 日韩av高清在线观看| 色婷婷免费视频| 亚洲精品高清在线| 国产精品无码粉嫩小泬| 亚洲电影中文字幕| 直接在线观看的三级网址| 国产精品成人一区二区| 伦理一区二区三区| 中文字幕欧美人与畜| 天堂蜜桃91精品| 中文字幕免费高清视频| 一区二区三区小说| 在线观看免费中文字幕| 日韩精品在线观| av影院在线| 99精品国产高清一区二区| 四季av一区二区三区免费观看| 国产91在线视频观看| 不卡av在线免费观看| 男人与禽猛交狂配| 91精品黄色片免费大全| 香蕉视频在线免费看| 国产成人精品av| 九色精品国产蝌蚪| 日韩在线视频在线观看| 波多野结衣中文字幕一区二区三区 | 激情在线视频| 欧美一级黄色网| 天堂日韩电影| 黄www在线观看| 99精品国产热久久91蜜凸| 久久精品久久精品久久| 日韩免费视频线观看| 最新日本在线观看| 99精彩视频在线观看免费| 欧美一区影院| 免费黄色在线播放| 亚洲午夜在线电影| 欧洲av在线播放| 97视频在线观看视频免费视频| 久久久久久毛片免费看| 婷婷无套内射影院| 99久久99久久精品国产片果冻| 欧美日韩精品区| 国产视频久久网| 欧美日韩免费观看视频| 日本一区网站| 久久精品久久久精品美女| 精品少妇一区二区三区密爱| 7777精品伊人久久久大香线蕉| 羞羞网站在线看| 国产伦精品一区二区三区四区免费 | 青青草超碰在线| 国产精品久久久久久久7电影| 久久中文字幕av| 四川一级毛毛片| 午夜视频在线观看一区| 日本中文字幕电影在线观看 | 99re只有精品| 久久久亚洲成人| 亚洲电影一级片| 久久99999| 一个色妞综合视频在线观看| 内射无码专区久久亚洲| 全亚洲最色的网站在线观看| 成人久久久久| 国产精品19p| 欧美日韩中文字幕综合视频 | 免费观看久久av| xxww在线观看| 亚洲高清久久久| 国产视频第一区| 亚洲一区二区三区sesese| 亚洲精品四区| 欧美巨胸大乳hitomi| 欧美成人猛片aaaaaaa| 韩国美女久久| 久久久久久久久影视| 99re6这里只有精品视频在线观看| 日韩精品一区不卡| 欧美日韩高清在线观看| 免费av一区| 深爱五月综合网| 欧美午夜片欧美片在线观看| 国产成人l区| 久99久在线| 国产精品亚洲成人| 丰满少妇xoxoxo视频| 欧美成人黑人xx视频免费观看| 国产精品免费不| 91九色蝌蚪porny| 欧美巨大另类极品videosbest |