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

關于Java泛型這些事

開發 后端
泛型(generics)是 JDK 5 中引入的一個新特性, 泛型提供了編譯時類型安全檢測機制,該機制允許程序員在編譯時檢測到非法的類型。

[[443125]]

關于泛型,有一道經典的考題:

  1. public static void main(String[] args) { 
  2.         List<String> list1= new ArrayList<String>(); 
  3.         List<Integer> list2= new ArrayList<Integer>(); 
  4.         System.out.println(list1.getClass() == list2.getClass()); 
  5.     } 

請問上面代碼的輸出結果是什么?

如果是了解泛型的同學會很容易答出:true,如果是不了解泛型的同學則很可能會答錯。今天就和大家一起來重溫一下Java泛型相關的知識。

一、什么是泛型?

泛型(generics)是 JDK 5 中引入的一個新特性, 泛型提供了編譯時類型安全檢測機制,該機制允許程序員在編譯時檢測到非法的類型。泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。具有以下特點:

  • 與普通的 Object 代替一切類型這樣簡單粗暴而言,泛型使得數據的類別可以像參數一樣由外部傳遞進來。它提供了一種擴展能力。它更符合面向抽象開發的軟件編程宗旨。
  • 當具體的類型確定后,泛型又提供了一種類型檢測的機制,只有相匹配的數據才能正常的賦值,否則編譯器就不通過。所以說,它是一種類型安全檢測機制,一定程度上提高了軟件的安全性防止出現低級的失誤。
  • 泛型提高了程序代碼的可讀性,不必要等到運行的時候才去強制轉換,在定義或者實例化階段,因為 Cache這個類型顯化的效果,程序員能夠一目了然猜測出代碼要操作的數據類型。

泛型按照使用情況可以分為3種:泛型類、泛型方法、泛型接口。

1.泛型類

我們可以定義如下一個泛型類

  1. /** 
  2.  * @author machongjia 
  3.  * @date 2021/12/28 20:02 
  4.  * @description 
  5.  */ 
  6. public class Generic<T> { 
  7.  
  8.     private T var; 
  9.  
  10.     public Generic(T var) { 
  11.         this.var = var; 
  12.     } 
  13.  
  14.     public T getVar() { 
  15.         return var; 
  16.     } 
  17.  
  18.     public static void main(String[] args) { 
  19.         Generic<Integer> i = new Generic<Integer>(1000); 
  20.         Generic<String> s = new Generic<String>("hello"); 
  21.         System.out.println(i.getVar()); 
  22.         System.out.println(s.getVar()); 
  23.     } 

輸出結果:

  1. 1000 
  2. hello 

常用的類似于T這樣的類型參數包括:

T:代表一般的任何類

E:代表 Element 的意思,或者 Exception 異常的意思

K:代表 Key 的意思。

V:代表 Value 的意思,通常與 K 一起配合使用

S:代表 Subtype 的意思

泛型類可以不止接受一個參數T,還可以接受多個參數,類似于下面這種:

  1. public class Generic<E,T> { 
  2.  
  3.     private E var1; 
  4.     private T var2; 
  5.  
  6.     public Generic(E var1, T var2) { 
  7.         this.var1 = var1; 
  8.         this.var2 = var2; 
  9.     } 
  10.  
  11.     public static void main(String[] args) { 
  12.         Generic<Integer,String> generic = new Generic<Integer,String>(1000,"hello"); 
  13.         System.out.println(generic.var1); 
  14.         System.out.println(generic.var2); 
  15.     } 

2.泛型方法

  1. public class Generic { 
  2.  
  3.     public <T> void testMethod(T t){ 
  4.  
  5.     } 
  6.  

泛型方法與泛型類稍有不同的地方是,類型參數也就是尖括號那一部分是寫在返回值前面的。中的 T 被稱為類型參數,而方法中的 T 被稱為參數化類型,它不是運行時真正的參數。

當然,聲明的類型參數,其實也是可以當作返回值的類型的。

泛型類與泛型方法共存的情況:

  1. public class Generic<T> { 
  2.  
  3.     public void testMethod(T t){ 
  4.         System.out.println(t.getClass().getName()); 
  5.     } 
  6.  
  7.     public <T> T testMethod1(T t){ 
  8.         return t; 
  9.     } 

上面代碼中,Test1是泛型類,testMethod 是泛型類中的普通方法,而 testMethod1 是一個泛型方法。而泛型類中的類型參數與泛型方法中的類型參數是沒有相應的聯系的,泛型方法始終以自己定義的類型參數為準。

3.泛型接口

泛型接口與泛型類的定義及使用基本相同。泛型接口常被用在各種類的生產器中,可以看一個例子:

  1. //定義一個泛型接口 
  2. public interface Generator<T> { 
  3.     public T next(); 

當實現泛型接口的類,未傳入泛型實參時:

  1. /** 
  2.  * 未傳入泛型實參時,與泛型類的定義相同,在聲明類的時候,需將泛型的聲明也一起加到類中 
  3.  * 即:class FruitGenerator<T> implements Generator<T>{ 
  4.  * 如果不聲明泛型,如:class FruitGenerator implements Generator<T>,編譯器會報錯:"Unknown class" 
  5.  */ 
  6. class FruitGenerator<T> implements Generator<T>{ 
  7.     @Override 
  8.     public T next() { 
  9.         return null
  10.     } 

當實現泛型接口的類,傳入泛型實參時:

  1. /** 
  2.  * 傳入泛型實參時,定義一個生產器實現這個接口,雖然我們只創建了一個泛型接口Generator<T> 
  3.  * 但是我們可以為T傳入無數個實參,形成無數種類型的Generator接口。 
  4.  * 在實現類實現泛型接口時,如已將泛型類型傳入實參類型,則所有使用泛型的地方都要替換成傳入的實參類型 
  5.  * 即:Generator<T>,public T next();中的的T都要替換成傳入的String類型。 
  6.  */ 
  7. public class FruitGenerator implements Generator<String> { 
  8.  
  9.     private String[] fruits = new String[]{"Apple""Banana""Pear"}; 
  10.  
  11.     @Override 
  12.     public String next() { 
  13.         Random rand = new Random(); 
  14.         return fruits[rand.nextInt(3)]; 
  15.     } 

4.通配符?

通配符的出現是為了指定泛型中的類型范圍,包含以下3 種形式。

  • <?>被稱作無限定的通配符。
  • <? extends T>被稱作有上限的通配符。
  • <? super T>被稱作有下限的通配符。

無限定通配符<?>

無限定通配符經常與容器類配合使用,它其中的 ? 其實代表的是未知類型,所以涉及到 ? 時的操作,一定與具體類型無關。

  1. public void testWildCards(Collection<?> collection){ 

上面的代碼中,方法內的參數是被無限定通配符修飾的 Collection 對象,它隱略地表達了一個意圖或者可以說是限定,那就是 testWidlCards() 這個方法內部無需關注 Collection 中的真實類型,因為它是未知的。所以,你只能調用 Collection 中與類型無關的方法。

相對應,前者?代表類型T及T的子類,后者?代表T及T的超類。

值得注意的是,如果用泛型方法來取代通配符,那么上面代碼中 collection 是能夠進行寫操作的。只不過要進行強制轉換。

二、什么是泛型的類型擦除?

Java泛型這個特性是從JDK 1.5才開始加入的,因此為了兼容之前的版本,Java泛型的實現采取了“偽泛型”的策略,即Java在語法上支持泛型,但是在編譯階段會進行所謂的“類型擦除”(Type Erasure),將所有的泛型表示(尖括號中的內容)都替換為具體的類型(其對應的原生態類型),就像完全沒有泛型一樣。理解類型擦除對于用好泛型是很有幫助的,尤其是一些看起來“疑難雜癥”的問題,弄明白了類型擦除也就迎刃而解了。

  • 泛型的類型擦除原則是:
  • 消除類型參數聲明,即刪除<>及其包圍的部分。
  • 根據類型參數的上下界推斷并替換所有的類型參數為原生態類型:如果類型參數是無限制通配符或沒有上下界限定則替換為Object,如果存在上下界限定則根據子類替換原則取類型參數的最左邊限定類型(即父類)。
  • 為了保證類型安全,必要時插入強制類型轉換代碼。
  • 自動產生“橋接方法”以保證擦除類型后的代碼仍然具有泛型的“多態性”。

1.類型擦除做了什么?

上面我們說了,編譯完成后會對泛型進行類型擦除,如果想要眼見為實,實際看一下的話應該怎么辦呢?那么就需要對編譯后的字節碼文件進行反編譯了,這里使用一個輕量級的小工具Jad來進行反編譯,Jad的使用也很簡單,下載解壓后,把需要反編譯的字節碼文件放在目錄下,然后在命令行里執行下面的命令就可以在同目錄下生成反編譯后的.java文件了:

  1. jad -sjava Test.class 

好了,工具準備好了,下面我們就看一下不同情況下的類型擦除。

無限制類型擦除

當類定義中的類型參數沒有任何限制時,在類型擦除后,會被直接替換為Object。在下面的例子中,中的類型參數T就全被替換為了Object(左側為編譯前的代碼,右側為通過字節碼文件反編譯得到的代碼):

有限制類型擦除 

當類定義中的類型參數存在限制時,在類型擦除中替換為類型參數的上界或者下界。下面的代碼中,經過擦除后T被替換成了Integer:

擦除方法中的類型參數

比較下面兩邊的代碼,可以看到在擦除方法中的類型參數時,和擦除類定義中的類型參數一致,無限制時直接擦除為Object,有限制時則會被擦除為上界或下界:

2.類型擦除帶來了哪些局限性?

類型擦除,是泛型能夠與之前的 java 版本代碼兼容共存的原因。但也因為類型擦除,它會抹掉很多繼承相關的特性,這是它帶來的局限性。

理解類型擦除有利于我們繞過開發當中可能遇到的雷區,同樣理解類型擦除也能讓我們繞過泛型本身的一些限制。比如

正常情況下,因為泛型的限制,編譯器不讓最后一行代碼編譯通過,因為類似不匹配,但是,基于對類型擦除的了解,利用反射,我們可以繞過這個限制。

  1. public interface List<E> extends Collection<E>{ 
  2.    
  3.    boolean add(E e); 

上面是 List 和其中的 add() 方法的源碼定義。

因為 E 代表任意的類型,所以類型擦除時,add 方法其實等同于:

  1. boolean add(Object obj); 

那么,利用反射,我們繞過編譯器去調用 add 方法。

  1. public class ToolTest { 
  2.  
  3.   public static void main(String[] args) { 
  4.     List<Integer> ls = new ArrayList<>(); 
  5.     ls.add(23); 
  6. //    ls.add("text"); 
  7.     try { 
  8.       Method method = ls.getClass().getDeclaredMethod("add",Object.class); 
  9.  
  10.       method.invoke(ls,"test"); 
  11.       method.invoke(ls,42.9f); 
  12.     } catch (NoSuchMethodException e) { 
  13.       // TODO Auto-generated catch block 
  14.       e.printStackTrace(); 
  15.     } catch (SecurityException e) { 
  16.       // TODO Auto-generated catch block 
  17.       e.printStackTrace(); 
  18.     } catch (IllegalAccessException e) { 
  19.       // TODO Auto-generated catch block 
  20.       e.printStackTrace(); 
  21.     } catch (IllegalArgumentException e) { 
  22.       // TODO Auto-generated catch block 
  23.       e.printStackTrace(); 
  24.     } catch (InvocationTargetException e) { 
  25.       // TODO Auto-generated catch block 
  26.       e.printStackTrace(); 
  27.     } 
  28.  
  29.     for ( Object o: ls){ 
  30.       System.out.println(o); 
  31.     } 
  32.   } 

打印結果是:

  1. 23 
  2. test 
  3. 42.9 

可以看到,利用類型擦除的原理,用反射的手段就繞過了正常開發中編譯器不允許的操作限制。

 

責任編輯:武曉燕 來源: 碼蟲甲
相關推薦

2021-07-29 09:20:18

Java泛型String

2017-03-07 11:45:57

DevOps容器

2017-04-10 15:11:16

2021-09-28 06:28:50

云原生安全云計算

2018-01-03 11:35:34

推送AndroidiOS

2024-04-23 08:23:36

TypeScript泛型Generics

2022-07-12 06:17:43

GoogleGolang開發工作

2009-09-25 10:03:51

Java泛型

2009-09-01 17:59:36

C#泛型的作用

2011-06-03 08:49:54

Java

2015-07-13 08:49:54

2017-10-12 10:20:13

服務器運行壽命

2021-06-17 06:51:32

Java泛型Java編程

2021-09-29 18:17:30

Go泛型語言

2019-06-25 15:00:53

SpringNullJava

2021-07-01 06:47:30

Java泛型泛型擦除

2011-03-21 16:26:28

java泛型

2021-06-18 08:25:42

Java泛型通配符

2021-03-26 08:41:11

Go語言Docker

2020-10-20 10:17:20

Java泛型Type
點贊
收藏

51CTO技術棧公眾號

青青在线视频| 91午夜交换视频| 日韩三级毛片| 精品久久久久久久大神国产| 欧美成人在线免费观看| 日韩乱码一区二区三区| 亚洲精品成人无限看| 亚洲第一男人天堂| 中国黄色片免费看| 在线播放免费av| 久久婷婷国产综合精品青草| 国产精品入口免费视频一| 免费在线观看一级片| 啪啪激情综合网| 欧美日韩亚洲综合一区 | 中文字幕无码毛片免费看| 国产精品186在线观看在线播放| 91亚洲国产成人精品一区二三| 国产精品久久9| 国产性生活网站| 精品日韩毛片| 亚洲国产精品久久久久秋霞蜜臀| 三上悠亚在线一区二区| 狠狠操一区二区三区| 国产精品国产三级国产有无不卡| 国产主播一区二区三区四区| 91麻豆成人精品国产免费网站| 亚洲视频www| 九九热精品视频| 精品亚洲aⅴ无码一区二区三区| eeuss鲁片一区二区三区| 欧美日韩视频一区二区| 青青草原av在线播放| heyzo一区| 亚洲免费观看高清| 午夜精品视频在线观看一区二区| 香港一级纯黄大片| 国产成人免费在线| 成人国产精品久久久| 中文人妻av久久人妻18| 亚洲电影成人| 欧美老少做受xxxx高潮| 超碰人人人人人人人| 欧美日韩中字| 亚洲人线精品午夜| 97伦伦午夜电影理伦片| 欧美激情99| 精品国产一区二区亚洲人成毛片| 亚洲一二三av| 国产乱码精品一区二区三区亚洲人| 欧美综合一区二区| 91香蕉视频污版| 欧美黑人粗大| 在线观看亚洲a| jizz欧美激情18| 日本在线中文字幕一区二区三区| 欧美午夜xxx| 99久久久无码国产精品6| 周于希免费高清在线观看| 香蕉加勒比综合久久| 国产曰肥老太婆无遮挡| a级片在线免费| 午夜影院在线观看欧美| 丰满少妇久久久| 日韩精品av| 色婷婷久久一区二区三区麻豆| 99爱视频在线| 国产成人免费9x9x人网站视频| 色婷婷久久综合| 亚洲视频一二三四| 国产精品久久久久久久久久辛辛 | 精品99在线| 在线色欧美三级视频| 国产成人在线网址| 天天射综合网视频| 欧美国产视频日韩| 国产成人精品片| 日韩不卡一区二区三区| 成人亚洲综合色就1024| 超碰在线观看99| 91一区二区三区在线观看| 日韩精品伦理第一区| 免费网站成人| 亚洲一区二区三区四区在线观看| 精品欧美一区免费观看α√| 色成人免费网站| 制服丝袜中文字幕一区| 韩国三级hd两男一女| 自拍视频一区| 欧美成年人网站| 久久国产黄色片| 黄色资源网久久资源365| 国产98在线|日韩| 第九色区av在线| 亚洲免费av观看| 青青草原成人网| 色999久久久精品人人澡69| 欧美成人a∨高清免费观看| 亚洲av网址在线| 久久一区二区三区喷水| 久久久久久久久久久久av| 久久久久久久久久一级| 国产成a人亚洲| 秋霞久久久久久一区二区| 黄色精品免费看| 精品久久久精品| 一道本在线免费视频| 久久精品色播| 久久精品最新地址| 亚洲精品男人的天堂| 国产精品99久久久久久有的能看 | 国产精品久久一区| www.综合色| 国产精品色眯眯| 国产中文字幕免费观看| 亚洲乱码一区| 日韩一区二区欧美| 国产成人无码一区二区在线播放| 国产精品一色哟哟哟| 日韩精品在在线一区二区中文| jizz一区二区三区| 日韩一区二区电影网| 欧美激情亚洲色图| 中文一区二区| 国产区一区二区三区| 久草免费在线观看| 91精品福利视频| 特级西西人体4444xxxx| 欧美日韩国产欧| 成人午夜在线观看| 免费在线看黄| 亚洲国产91视频| 久久国产欧美日韩精品| 久久另类ts人妖一区二区| 1区2区在线观看| 884aa四虎影成人精品一区| 国产一级久久久久毛片精品| 亚洲欧美日韩国产一区| 精品国产乱码久久久久软件| 直接在线观看的三级网址| 欧美日本视频在线| 91麻豆精品国产91久久综合| 鲁大师成人一区二区三区| 国产一区二区中文字幕免费看| 影音先锋男人资源在线| 日韩一区二区三区四区| 国产人妻精品一区二区三区不卡| 久久精品久久综合| 一区二区不卡在线视频 午夜欧美不卡'| 性欧美freesex顶级少妇| 日韩高清a**址| 国产对白videos麻豆高潮| 懂色av一区二区三区免费看| 亚洲精品天堂成人片av在线播放| 国产精品国产亚洲精品| 美女黄色丝袜一区| wwwxxxx国产| 亚洲国产精品久久一线不卡| 艳妇乳肉亭妇荡乳av| 99xxxx成人网| 欧美久久综合性欧美| 综合另类专区| 中文字幕综合在线| 在线观看视频二区| 亚洲欧美日本在线| 久久久久国产免费| 亚洲专区在线| 一区二区三区av在线| av国产精品| 欧美精品国产精品日韩精品| 天天干免费视频| 一本久道久久综合中文字幕| 调教驯服丰满美艳麻麻在线视频| 久久国产成人午夜av影院| 看全色黄大色大片| 国内精品偷拍| 国产精品嫩草影院一区二区| 大地资源网3页在线观看| 欧美成人性战久久| 国产高清中文字幕| 国产精品国产三级国产| 性一交一黄一片| 翔田千里一区二区| 亚洲视频在线二区| 午夜精品在线| 国产97色在线|日韩| 麻豆网在线观看| 亚洲福利在线看| a片在线免费观看| 亚洲一区二三区| www.中文字幕av| 国产麻豆9l精品三级站| 狠狠97人人婷婷五月| 久久视频在线| 久久久久网址| 日本成人手机在线| 国产91亚洲精品| 国产在线xxx| 色偷偷综合社区| 色婷婷av一区二区三区之e本道| 欧美午夜精品理论片a级按摩| 欧美丰满艳妇bbwbbw| 久久久久99精品国产片| 久久精品国产99久久99久久久| 国产精品亚洲欧美| 99精品一级欧美片免费播放| 九一精品国产| 国产精品久久久久久久久久久久午夜片| 伊人久久高清| 亚州成人av在线| 91精品久久| 最近日韩中文字幕中文| 天天干免费视频| 日韩欧美在线观看一区二区三区| 无码人妻一区二区三区线| 亚洲一区在线免费观看| 中文乱码字幕高清一区二区| www激情久久| 亚洲少妇中文字幕| 韩国毛片一区二区三区| 成年人在线观看视频免费| 亚洲欧洲视频| 成人av在线不卡| 亚洲精品99| 一区二区三区三区在线| 国产亚洲欧美日韩在线观看一区二区| 国产日韩精品推荐| 亚洲一级大片| 国产专区欧美专区| 91亚洲视频| 国产精品wwwwww| 中老年在线免费视频| 韩国美女主播一区| 91美女精品| 欧美激情欧美激情| 青草视频在线免费直播| 草民午夜欧美限制a级福利片| 午夜在线播放| 色婷婷久久av| 欧美三级黄网| 久久精品国产视频| 快射av在线播放一区| 日韩中文字幕网站| 免费网站看v片在线a| 精品国产一区二区在线| 日本视频在线| 久久久www成人免费精品| 一本一道波多野毛片中文在线 | 96成人在线视频| 精品视频国内| 亚洲中国色老太| 日韩欧美高清一区二区三区| 99re6在线| 99ri日韩精品视频| 国产综合 伊人色| 亚洲国产欧美日韩在线观看第一区 | 自拍视频国产精品| 欧美被日视频| 久久av资源网站| 午夜伦理在线视频| 久久免费少妇高潮久久精品99| 91桃色在线| 欧美最顶级丰满的aⅴ艳星| 少妇一区视频| 国产日韩亚洲欧美| 视频国产精品| 久久精品日产第一区二区三区精品版 | av在线最新| 日韩美女免费观看| 亚洲资源在线| 国产精品午夜av在线| 网友自拍一区| 一区二区视频在线观看| 欧美特黄a级高清免费大片a级| 国产一区二区视频播放| 久久午夜精品| 超碰人人草人人| 成人一区二区三区| 久久久久亚洲av成人无码电影| 国产精品久久看| 久久久一区二区三区四区| 色综合咪咪久久| 国产精品伦理一区| 亚洲电影在线看| av大全在线免费看| 欧美高清在线观看| 345成人影院| 91精品视频专区| 久久porn| 中文字幕一区综合| 亚洲九九精品| xx欧美撒尿嘘撒尿xx| av中文字幕一区| 国产白丝一区二区三区 | 久久久精品欧美丰满| 亚洲不卡在线播放| 日韩欧美在线字幕| 999国产精品视频免费| 亚洲片在线资源| 欧美人与性动交α欧美精品济南到 | 亚洲国产精彩中文乱码av| 国产午夜在线视频| 国内精品久久久久| 在线观看欧美| 奇米影视首页 狠狠色丁香婷婷久久综合 | 成人天堂资源www在线| 男人天堂资源网| 福利一区福利二区微拍刺激| 国产又粗又猛又黄又爽| 亚洲另类图片色| 视频在线观看入口黄最新永久免费国产| 国产成人免费av电影| 久久夜色精品国产噜噜av小说| 26uuu成人| 美女视频黄 久久| 波多野结衣办公室33分钟| 亚洲国产精品影院| 精品国产伦一区二区三| 在线看日韩欧美| 欧美黑人疯狂性受xxxxx野外| 国产成人精品免费视频大全最热| 色135综合网| 欧美日韩在线免费播放| 91玉足脚交白嫩脚丫在线播放| 91香蕉视频在线播放| 欧美网站一区二区| 黄色的视频在线免费观看| 555www成人网| 六月丁香久久丫| 欧美日韩福利在线| 高清av一区二区| 青青操国产视频| 制服丝袜中文字幕亚洲| 九七电影韩国女主播在线观看| 国产精品成人aaaaa网站| 国产传媒欧美日韩成人精品大片| 美女日批免费视频| 91在线云播放| 亚洲婷婷综合网| 亚洲久久久久久久久久| 日本蜜桃在线观看视频| 国产亚洲情侣一区二区无| 在线永久看片免费的视频| 亚洲品质自拍| 免费无码国产v片在线观看| av一区二区久久| 日韩黄色在线视频| 亚洲国产精品资源| 美女av在线免费看| 免费看国产精品一二区视频| 国产模特精品视频久久久久| 亚洲av无码一区二区三区网址| 欧美日韩亚洲天堂| 青梅竹马是消防员在线| 国产精品777| 成人精品久久| 国产亚洲视频一区| 一区二区三区四区在线播放| 亚洲爱爱综合网| 97视频网站入口| 精品免费囯产一区二区三区 | 制服丝袜综合日韩欧美| 久久91精品国产91久久小草| 久久福利免费视频| 欧美电影免费提供在线观看| 日本乱理伦在线| 韩国成人av| 日韩电影在线一区| 糖心vlog免费在线观看| 精品国产3级a| 国产精品高清乱码在线观看| 伊人久久av导航| 成人激情小说乱人伦| 中文字幕一区二区人妻电影| 在线视频一区二区| 精品国产亚洲一区二区三区大结局 | 午夜视频一区二区三区| 久青草国产在线| 成人网址在线观看| 亚洲激情网址| 日韩一区二区a片免费观看| 777色狠狠一区二区三区| 成人性生交大片免费看在线播放| 日本一区不卡| 国产老女人精品毛片久久| 中文字幕亚洲高清| 三级精品视频久久久久| 日韩精品视频在线看| 国产91在线免费| 成人免费在线播放视频| 艳母动漫在线看| 亚洲a在线播放| 久久国产欧美| 欧美成人综合色| 国产一区二区三区视频| 亚洲免费一区三区| 99视频在线视频| 欧美日韩国产色视频| 国产一二区在线| 欧美午夜精品久久久久免费视|