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

基礎(chǔ)篇:深入解析Java泛型

開發(fā) 后端
先了解下java的Type類型體系(類的類=>類型),Type是所有類型(原生類型-Class、參數(shù)化類型-Parameterizedtype、數(shù)組類型-GenericArrayType、類型變量-TypeVariable、基本類型-Class)的共同接口;前兩篇反射和注解講到的Class就是Type的一實(shí)現(xiàn)類。

[[347300]]

本文轉(zhuǎn)載自微信公眾號(hào)「潛行前行」,作者cscw 。轉(zhuǎn)載本文請(qǐng)聯(lián)系潛行前行公眾號(hào)。  

 1 JAVA的Type類型體系

先了解下java的Type類型體系(類的類=>類型),Type是所有類型(原生類型-Class、參數(shù)化類型-Parameterizedtype、數(shù)組類型-GenericArrayType、類型變量-TypeVariable、基本類型-Class)的共同接口;前兩篇反射和注解講到的Class就是Type的一實(shí)現(xiàn)類

  • Type下面又有四個(gè)子接口類ParameterizedType、TypeVariable、GenericArrayType、WildcardType
    • List表示泛型,E是TypeVariable類型,List則是ParameterizedType(參數(shù)化類型),List里的String稱為實(shí)際參數(shù)類型
    • 具體化泛型中的類型時(shí),可以使用 ? extends 或 ? super來表示繼承關(guān)系;如List,而里面的 ? 稱為通配符類型WildcardType
    • GenericArrayType 表示一種元素類型是ParameterizedType(參數(shù)化類型)或者TypeVariable(類型變量)的數(shù)組類型,如T[] 或者 List[]
  • 注解是JDK1.5才出現(xiàn)了的,為了表示被注解的類型的,加入AnnotatedElement類型,字面意思就是被注解的元素。JDK1.8又有了AnnotatedType將Type和被注解元素的概念關(guān)聯(lián)起來。
  • AnnotatedType也有四個(gè)子接口,和Type的四個(gè)子接口一一對(duì)應(yīng),如:ParameterizedType類型被注解則被編譯器解析成AnnotatedParameterizedType: @AnTest("list")Listlist

2 泛型的概念

  • Java 泛型(generics)是JDK1.5中引入的一個(gè)新特性,其本質(zhì)是參數(shù)化類型,解決不確定具體對(duì)象類型的問題;其所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)(type parameter)這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法

泛型: 把類型明確的工作推遲到創(chuàng)建對(duì)象或調(diào)用方法的時(shí)候才去明確的特殊的類型

3 泛型類和泛型方法的示例

  • 泛型類的定義
  1. public class MainTest<T> { 
  2.     private  T param; 
  3. public static void main(String[] args){ 
  4.         MainTest<String> data = new MainTest<String>(){}; 
  5.         ParameterizedType genType1 = (ParameterizedType)data.getClass().getGenericSuperclass(); 
  6.   } 
  • 泛型方法的定義
  1. public class MainTest{ 
  2.     public static void main(String[] args){ 
  3.         printData("siting"); 
  4.     } 
  5.     static  <T> T printData(T t){ 
  6.         System.out.println(t); 
  7.         return t; 
  8.     } 

接口和抽象類都可以使用泛型

4 類型擦除

  • 創(chuàng)建泛型的實(shí)例時(shí),jvm是會(huì)把具體類型擦除的;編譯生成的字節(jié)碼中不包含泛型中的類型參數(shù),即ArrayList和ArrayList都擦除成了ArrayList,也就是被擦除成"原生類型",這就是泛型擦除
  1. public class MainTest { 
  2.     public static void main(String[] args){ 
  3.         List<String> strArr  = new ArrayList<>(); 
  4.         List<Integer> intArr  = new ArrayList<>(); 
  5.         Type strClazz = strArr.getClass(); 
  6.         Type intClazz = intArr.getClass(); 
  7.     } 

  • 查看編譯后的字節(jié)碼文件是如何表示的: idea菜單 -> view -> show ByteCode
  1. public class MainTest<T> { 
  2.     T param; 
  3.     public static void main(String[] args){ 
  4.         MainTest<String> test = new MainTest<>(); 
  5.         test.setParam("siting"); 
  6.     } 
  7.     public T getParam() {  return param;   } 
  8.     public void setParam(T param) {  this.param = param;  } 
  9. public class com/MainTest { 
  10.   ...省略 
  11.   public static main([Ljava/lang/String;)V 
  12.    L0 
  13.     LINENUMBER 7 L0 
  14.     NEW com/MainTest 
  15.     DUP 
  16.     INVOKESPECIAL com/MainTest.<init> ()V 
  17.     ASTORE 1 
  18.    L1 
  19.     LINENUMBER 8 L1 
  20.     ALOAD 1 
  21.     LDC "siting"     // 調(diào)用類型擦除后的setParam(Object) 
  22.     INVOKEVIRTUAL com/MainTest.setParam (Ljava/lang/Object;)V 
  23.    L2 
  24.    ...省略//getParam 的返回值是Object 
  25.   public getParam()Ljava/lang/Object; 
  26.    L0 
  27.     LINENUMBER 10 L0 
  28.     ALOAD 0 
  29.     GETFIELD com/MainTest.param : Ljava/lang/Object; 
  30.     ARETURN 
  31.    ...省略//setParam 的入?yún)⑹荗bject 
  32.   public setParam(Ljava/lang/Object;)V 
  33.    L0 
  34.     LINENUMBER 11 L0 
  35.     ALOAD 0 
  36.     ALOAD 1 
  37.     PUTFIELD com/MainTest.param : Ljava/lang/Object; 
  38.     RETURN 
  39.    ... 

可以看出T(String)都被轉(zhuǎn)換為Object類型,最初的初始化的String不見了

5 泛型的繼承

  • 子類可以指定父類的泛型參數(shù),可以是已知類(Integer、String等),也可以用子類自己的泛型參數(shù)指定
  • 泛型被繼承時(shí),且指定父類泛型參數(shù),則額外生成的ParameterizedType類型作為子類的父類;如果沒有指定父類泛型參數(shù),則直接繼承原生類型
  1. public class MainTest<T> { 
  2.     T param; 
  3.     static public class SubTest1 extends MainTest<String>{} 
  4.     static public class SubTest2<R> extends MainTest<R>{} 
  5.     //SubTest3繼承的時(shí)原生類型 
  6.     static public class SubTest3 extends MainTest{} 

6 泛型變量TypeVariable

  • (先臨時(shí)定義一個(gè)名稱,Test里的E為泛型參數(shù));泛型變量TypeVariable:泛型的泛型參數(shù)就是TypeVariable;當(dāng)父類使用子類的泛型參數(shù)指定自身的泛型參數(shù)時(shí);或者泛型屬性定義在泛型類A中,并使用泛型類A的泛型參數(shù)T時(shí),其泛型參數(shù)都會(huì)被編譯器定為泛型變量TypeVariable,而不是被擦除
  1. public class MainTest<T> { 
  2.     List<T> param; 
  3.     public static void main(String[] args) throws Exception{ 
  4.         Class clazz =  MainTest.class; 
  5.         TypeVariable[] typeVariable = clazz.getTypeParameters(); 
  6.         // 1 
  7.         Field field = clazz.getDeclaredField("param"); 
  8.         ParameterizedType arrayType = (ParameterizedType)field.getGenericType(); 
  9.         // interface List<E> 的泛型類型E被T,具體化,因此其被識(shí)別為 TypeVariable 
  10.         TypeVariable variable1 = (TypeVariable)arrayType.getActualTypeArguments()[0]; 
  11.         // 2 
  12.         ParameterizedType type = (ParameterizedType)SubTest.class.getGenericSuperclass(); 
  13.         TypeVariable variable2 = (TypeVariable)type.getActualTypeArguments()[0]; 
  14.     } 
  15.     static class SubTest<R> extends MainTest<R>{} 

7 參數(shù)化類型ParameterizedType

  1. public interface ParameterizedType extends Type { 
  2.     //獲取實(shí)際參數(shù),List<String>里的String; 如果是List<T>則是TypeVariable類型 
  3.     Type[] getActualTypeArguments();  
  4.     // 獲取原始類型List<String> -> List<E> 
  5.     Type getRawType();   
  6.     Type getOwnerType(); 
  • 需要注意的點(diǎn),我們不能直接獲取指定具體參數(shù)的泛型的類型,如Class clazz = List.class編譯時(shí)不通過的;還有就是直接通過泛型類new創(chuàng)建的對(duì)象,其Class并非ParameterizedType類型,而是泛型本身的class,示例如下
  1. public class MainTest<T> { 
  2.     public static void main(String[] args){ 
  3.         MainTest<String> str = new MainTest<String>(); 
  4.         Class variable = str.getClass(); 
  5.         Type genType1 = variable.getGenericSuperclass(); 
  6.     } 

  • 被具體參數(shù)化的泛型才能被編譯器識(shí)別為ParameterizedType類型,有三種方式獲取ParameterizedType類型
  1. // 1 子類繼承泛型時(shí),指定具體參數(shù)(可以是String等已知類型,也可以是子類的泛型參數(shù)) 
  2. // 2 獲取在類內(nèi)部定義的泛型屬性,需指定具體泛型參數(shù) 
  3. // 3 局部代碼,可以通過泛型的匿名內(nèi)部子類(需指定具體泛型參數(shù))獲取ParameterizedType類型 
  4. public class MainTest<T> { 
  5.     List<T> list; 
  6.     public static void main(String[] args) throws NoSuchFieldException { 
  7.         SubTest<String> str = new SubTest<>(); 
  8.         // 方式一 
  9.         Class variable = str.getClass(); 
  10.         // 父類是(521)ParameterizedType類型 
  11.         ParameterizedType genType = (ParameterizedType)variable.getGenericSuperclass(); 
  12.         // (521)ParameterizedType類型的原生類型是(479)class com.MainTest 
  13.         Type clazz = genType.getRawType(); 
  14.         //MainTest.class 的原生類型是 (479)class com.MainTest 
  15.         Class rawClazz = MainTest.class; 
  16.  
  17.         //方式二,泛型屬性 
  18.         Field field = rawClazz.getDeclaredField("list"); 
  19.         //屬性list 類型是(546)ParameterizedType類型List<T> 
  20.         ParameterizedType fieldType = (ParameterizedType)field.getGenericType(); 
  21.  
  22.         // 方式三 
  23.         MainTest<String> sub3 = new MainTest<String>(){}; 
  24.         // clazz3是匿名子類 
  25.         Class clazz3 =  sub3.getClass(); 
  26.         //父類是(555)ParameterizedType類型 
  27.         ParameterizedType genType3 = (ParameterizedType) clazz3.getGenericSuperclass(); 
  28.         // (555)ParameterizedType類型的原生類型是(479)class com.MainTest 
  29.         Type type3 = genType3.getRawType(); 
  30.     } 
  31.     public static class SubTest<R> extends MainTest<R>{ } 

8 通配符(WildcardType)

無邊界通配符:無界通配符 ? 可以適配任何引用類型:

  • 當(dāng)方法參數(shù)需要傳入一個(gè)泛型時(shí),而且無法確定其類型時(shí)。直接使用無具體泛型變量的泛型,容易造成安全隱患;若在方法代碼里進(jìn)行類型轉(zhuǎn)換,極容易出現(xiàn)ClassCastException錯(cuò)誤
  • 那泛型變量用Object代替不就行了?但是泛型類+具體參數(shù)轉(zhuǎn)變的ParameterizedType(參數(shù)化類型)是不存在繼承關(guān)系;即Object是String的父類,但是List 和List的類型是不同的兩個(gè)ParameterizedType,不存在繼承關(guān)系。于是有了類型通配符 ?
  1. public static void print(List list){}  
  2. ----->>> 
  3. public static void print(List<?> list){}  

  • 無界通配符可以匹配任意類型;但是在使用?時(shí),不能給泛型類的變量設(shè)置值,因?yàn)槲覀儾恢谰唧w類型是什么;如果強(qiáng)行設(shè)置新值,后面的讀容易出現(xiàn)ClassCastException錯(cuò)誤。因此編譯器限制了**通配符 ?**的泛型只能讀不能寫

上界限定通配符 < ? extends E>

  • 想接收一個(gè)List集合,它只能操作數(shù)字類型的元素【Float、Integer、Double、Byte等數(shù)字類型都行】,怎么做?可以使用List,表明List里的元素都是Number的子類
    1. public static void print(List<? extends Number> list) { 
    2.         Number n = new Double("1.0"); 
    3.         list.add(n); 
    4.         Number tmp = list.get(0); 
    5.     } 

  • 圖片里可以看出,存在上界通配符,因?yàn)榫唧w類型不確定,也是只能讀不能寫的

下界限定通配符 < ? super E>

  1. class Parent{ } 
  2. class Child extends Parent{ } 
  3. public class MainTest<T> { 
  4.     T param; 
  5.     public static void main(String[] args){ 
  6.         MainTest<? super Child> parent_m = new MainTest<>(); 
  7.         parent_m.setParam(new Child()); 
  8.         Object parent = parent_m.getParam(); 
  9.     } 
  10.     public T getParam() {  return param;  } 
  11.     public void setParam(T param) {  this.param = param; } 

  • 如果定義了通配符是誰的父類,則是下界限定通配符;此類通配符可讀可寫,轉(zhuǎn)成任意父類都不會(huì)出現(xiàn)ClassCastException錯(cuò)誤。
  • 個(gè)人猜想:難道是因?yàn)橥ㄅ浞蜕辖缦薅ㄍㄅ浞姆盒? 向下轉(zhuǎn)型容易出現(xiàn)ClassCastException錯(cuò)誤,而下界限定通配符向上轉(zhuǎn)型不會(huì)出現(xiàn)ClassCastException錯(cuò)誤,因此java規(guī)范限制前者編譯出錯(cuò),而后面編譯通過?

9 泛型數(shù)組(GenericArrayType)

  1. public interface GenericArrayType extends Type { 
  2.     //獲得這個(gè)數(shù)組元素類型,即獲得:A<T>(A<T>[])或  T(T[]) 
  3.     Type getGenericComponentType(); 
  • GenericArrayType,泛型數(shù)組,描述的是ParameterizedType類型以及TypeVariable類型數(shù)組,即形如:Test[][]、T[]等,是GenericArrayType的子接口
  1. public class MainTest<T> { 
  2.     T[] param; 
  3.     public static void main(String[] args) throws Exception{ 
  4.         Class clazz =  MainTest.class; 
  5.         Field field = clazz.getDeclaredField("param"); 
  6.         GenericArrayType arrayType = (GenericArrayType)field.getGenericType(); 
  7.         TypeVariable variable = (TypeVariable) arrayType.getGenericComponentType(); 
  8.     } 

 

責(zé)任編輯:武曉燕 來源: 潛行前行
相關(guān)推薦

2025-01-24 08:19:57

2025-11-05 03:00:55

2025-03-28 06:01:00

TypeScript泛型開發(fā)

2017-11-14 14:41:11

Java泛型IO

2024-10-22 16:59:07

2024-11-05 09:11:09

TypeScript開發(fā)者代碼

2019-09-04 00:20:10

JSON泛型擦除

2009-08-24 18:22:05

C# 泛型編程

2009-09-25 10:03:51

Java泛型

2021-05-10 07:38:09

Swift 泛型Tips

2009-08-24 17:07:09

C# 泛型

2011-06-03 08:49:54

Java

2021-12-30 19:34:15

Java泛型JDK

2020-11-10 07:09:59

Java泛型語言

2021-06-17 06:51:32

Java泛型Java編程

2021-09-29 18:17:30

Go泛型語言

2016-10-31 19:41:29

Java垃圾回收

2021-07-01 06:47:30

Java泛型泛型擦除

2011-03-21 16:26:28

java泛型

2021-06-18 08:25:42

Java泛型通配符
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

精品视频在线一区二区| 中文字幕日本视频| 精品欧美视频| 亚洲国产日日夜夜| 久久99热只有频精品91密拍| 精品一区二区无码| 欧美成人午夜| 精品亚洲一区二区三区四区五区| 91激情视频在线| 伊人电影在线观看| 国产亚洲1区2区3区| 国产精品欧美日韩| 九九热这里有精品视频| 国产高清视频免费最新在线| 日本欧美一区二区三区| 欧美国产亚洲精品久久久8v| 亚洲天堂视频一区| 亚洲日本免费电影| 黄色网页在线免费观看| 视频在线观看一区二区三区| 精品自在线视频| 91视频免费观看网站| 日韩区一区二| 欧美色电影在线| 日本a在线免费观看| 午夜免费视频在线国产| 99re热视频精品| 91国产在线免费观看| 69亚洲精品久久久蜜桃小说 | 欧美精品视频www在线观看| 被灌满精子的波多野结衣| 中国日本在线视频中文字幕| 91在线观看高清| 91午夜理伦私人影院| 婷婷激情五月综合| 国产欧美另类| 欧美国产日本在线| 少妇aaaaa| 久久国产亚洲精品| 国产午夜精品一区二区三区| www.88av| 国产精品极品国产中出| 日韩久久免费av| 韩国一区二区在线播放| 91国拍精品国产粉嫩亚洲一区 | 色婷婷**av毛片一区| 欧美bbbbb性bbbbb视频| 欧美a级网站| 精品久久久影院| 久久久久久无码精品人妻一区二区| 欧洲精品久久久久毛片完整版| 欧美主播一区二区三区| 青青在线视频免费| 蜜桃视频成人m3u8| 在线观看成人小视频| 免费午夜视频在线观看| 久久91导航| 欧美在线你懂的| 91n.com在线观看| 在线一区视频观看| 欧美性欧美巨大黑白大战| 丝袜制服一区二区三区| 国产a亚洲精品| 欧美久久久久久蜜桃| 亚洲精品性视频| 91精品福利观看| 欧美一级一级性生活免费录像| 男生和女生一起差差差视频| 亚洲国产视频二区| 精品国产91乱码一区二区三区 | 92久久精品一区二区| 久久精品国内一区二区三区| 91久久精品在线| www日本视频| 99久久er热在这里只有精品15 | 国产精品久久久久久久av电影 | 欧美变态tickle挠乳网站| 欧美xxxx黑人| 亚洲精品播放| 日韩亚洲欧美中文高清在线| 永久免费看黄网站| 一本色道久久综合| 国产精品女人网站| 亚洲高清精品视频| 久久精品夜色噜噜亚洲aⅴ| 亚洲精品日韩精品| 久草在线视频福利| 欧美日在线观看| 黄色手机在线视频| 99re8这里有精品热视频免费| 日韩精品视频三区| 少妇视频在线播放| 国产精品大片| 国产成人精品电影| 精品国自产拍在线观看| 99视频一区二区| 亚洲三区在线| 老牛影视精品| 777xxx欧美| 大黑人交xxx极品hd| 999国产精品永久免费视频app| 欧美成人三级视频网站| 亚洲天堂男人av| 国产激情偷乱视频一区二区三区| 美女亚洲精品| 日韩欧美一起| 欧美日韩小视频| 波多野结衣影院| 91不卡在线观看| 国产成人精品一区二区| 东京干手机福利视频| 国产日韩欧美精品电影三级在线| www.一区二区.com| 国产精品久久久久久久久免费高清| 精品美女被调教视频大全网站| 美国黄色特级片| 亚洲少妇诱惑| 不卡一区二区三区视频| 欧美三级理伦电影| 色综合中文字幕| 在线观看成人动漫| 欧美69wwwcom| 国产在线一区二区三区| 国内在线免费高清视频| 午夜激情久久久| 少妇性l交大片7724com| 国产精品黑丝在线播放 | 成人网av.com/| 亚洲日韩中文字幕在线播放| 日韩乱码在线观看| 国产福利精品一区二区| 热这里只有精品| 激情久久一区二区| 在线观看精品国产视频| 亚洲天堂一区在线| 99久久久久免费精品国产| 真人做人试看60分钟免费| 国产精品亚洲综合在线观看| www.日韩av.com| 亚洲一卡二卡在线| 日本一区二区成人| 日韩av片网站| 成人在线免费小视频| 国产91精品网站| 国产在线观看高清视频| 色999日韩国产欧美一区二区| 9.1成人看片| 免费在线播放第一区高清av| 乱色588欧美| 综合另类专区| 亚洲欧美在线x视频| 国产精品va无码一区二区三区| 91在线视频播放| 日本a级片免费观看| 蜜桃一区二区三区| 国产精品www色诱视频| 国产youjizz在线| 在线免费观看成人短视频| 在线视频第一页| 蜜臀av国产精品久久久久| 亚洲第一综合| 亚洲综合资源| 色综合久久88| 五月天婷婷激情网| 日韩欧美主播在线| av在线播放中文字幕| 精品综合久久久久久8888| 中文网丁香综合网| 日本在线一区二区三区| 久久久久久久一区二区| 日韩大胆视频| 欧美日韩视频第一区| 全网免费在线播放视频入口| 成人免费观看男女羞羞视频| av免费播放网址| 久久视频在线| 国产不卡一区二区在线观看| 国产精品电影| 中文字幕亚洲综合久久筱田步美| 国产一区二区三区四区视频| 一区二区三区欧美亚洲| 中文字幕影片免费在线观看| 肉肉av福利一精品导航| 永久免费在线看片视频| 全球av集中精品导航福利| 国产精品免费电影| 亚洲综合伊人久久大杳蕉| 日韩激情av在线播放| 亚洲影视一区二区| 亚洲综合视频在线| 国产免费无遮挡吸奶头视频| 国产一区在线精品| 久久国产亚洲精品无码| 亚洲二区三区不卡| 鲁鲁视频www一区二区| 99久久久成人国产精品| 2019中文字幕全在线观看| 日本三级在线播放完整版| 亚洲国产精品久久久| 91精品视频免费在线观看| 激情成人中文字幕| www.xxxx日本| 久久精品亚洲一区二区三区浴池 | 不卡的av电影在线观看| 国产成人手机视频| 激情综合久久| 亚洲人一区二区| 男人的天堂久久| 成人在线视频网| 自拍在线观看| 欧美国产高跟鞋裸体秀xxxhd| 国产免费永久在线观看| 亚洲国产精品va在线观看黑人| 亚洲一级特黄毛片| 色老头久久综合| 成人午夜视频精品一区| 亚洲四区在线观看| 免费视频91蜜桃| 91香蕉视频mp4| 深夜视频在线观看| 麻豆视频观看网址久久| 可以免费观看av毛片| 亚洲高清资源| 91免费版看片| 91精品秘密在线观看| 亚洲ai欧洲av| 久久99青青| 精品国产乱码久久久久软件 | 69av视频在线| 国产精品不卡在线观看| 黄色工厂在线观看| 99在线热播精品免费| 国产艳妇疯狂做爰视频| 国产精品综合一区二区| 亚洲黄色片免费| 看电视剧不卡顿的网站| 91福利国产成人精品播放| 爽爽淫人综合网网站| 波多野结衣家庭教师在线播放| 激情欧美一区二区三区| 91精品一区二区三区四区| 97精品国产福利一区二区三区| 翔田千里亚洲一二三区| 欧美三级情趣内衣| 五月天丁香综合久久国产 | 日韩人妻精品中文字幕| 岛国av一区二区三区| 国产精品第56页| 亚洲综合网站在线观看| 日本三级视频在线| 午夜在线电影亚洲一区| 亚洲一区欧美在线| 欧美午夜激情在线| 日本黄色一级视频| 欧美伊人精品成人久久综合97| 亚洲av无码不卡| 91久久免费观看| 成人黄色免费网| 欧美日韩国产大片| 国产精品久久777777换脸| 在线播放/欧美激情| 99国产精品久久久久99打野战| 91精品国产免费| 国产 日韩 欧美 精品| 亚洲韩国青草视频| 男女av在线| 中文字幕在线观看亚洲| a视频在线免费看| 久久免费视频网| 最新日韩精品| 成人精品一区二区三区电影免费| 视频国产精品| 精品国产福利| 91欧美大片| 日韩成人三级视频| 午夜亚洲一区| 午夜剧场高清版免费观看 | 欧美婷婷六月丁香综合色| 91福利免费视频| 亚洲аv电影天堂网| 欧美日韩国产综合视频| www.欧美精品| 精精国产xxxx视频在线野外| 国产精品999999| 免费一区二区三区在线视频| 久久99精品久久久久子伦| 欧美三级情趣内衣| 久草视频国产在线| 免费在线观看视频一区| 制服丝袜av在线| 国产拍欧美日韩视频二区| 青春草免费视频| 在线视频国内自拍亚洲视频| 不卡视频免费在线观看| 亚洲色图狂野欧美| 久操av在线| 国产欧美中文字幕| 欧美午夜18电影| 免费在线精品视频| 国产亚洲毛片在线| 手机精品视频在线| 国产欧美一区二区在线观看| 久久综合激情网| 欧美男女性生活在线直播观看| 婷婷av一区二区三区| 久久精品国产久精国产思思| sis001欧美| 国产精品免费区二区三区观看 | 久久视频在线看| xx欧美视频| 成人91免费视频| 久久婷婷蜜乳一本欲蜜臀| 97国产精东麻豆人妻电影 | 欧美日韩不卡视频| 天堂а在线中文在线无限看推荐| 欧美成人精品xxx| 97人人做人人爽香蕉精品| 精品一区二区三区日本| 欧美成人日韩| 天天操精品视频| 中文字幕欧美激情| 欧美性猛交bbbbb精品| 精品国产三级电影在线观看| 麻豆传媒视频在线| 国产精品免费视频xxxx| 精品在线播放| 女性女同性aⅴ免费观女性恋| 成人高清视频在线观看| 久久久久99精品成人片试看| 欧美剧在线免费观看网站| 91大神xh98hx在线播放| 国产成人精品在线观看| 国产91一区| 成年网站在线免费观看| 成人avav在线| 国产精品suv一区二区| 精品国产乱码久久久久久1区2区 | 亚洲精品永久视频| 日本一区二区免费在线观看视频| jizz国产在线观看| 日韩高清中文字幕| 成人av观看| 日本高清视频一区二区三区| 丝袜国产日韩另类美女| 青娱乐国产视频| 欧洲人成人精品| 成黄免费在线| 国产日韩欧美在线看| 色呦哟—国产精品| 91视频这里只有精品| 中文字幕在线不卡一区| 国产美女www爽爽爽视频| 超薄丝袜一区二区| 涩爱av色老久久精品偷偷鲁| 久久这里只有精品18| 成人h动漫精品一区二| 中日韩黄色大片| 亚洲新声在线观看| 成人涩涩视频| 国产日韩视频在线播放| 国产美女精品人人做人人爽| 精品无码一区二区三区电影桃花| 精品国产一区二区三区四区四| а√天堂8资源在线| 欧美日韩在线精品| 久久av资源站| 久久国产精品波多野结衣| 亚洲第一精品久久忘忧草社区| 乱馆动漫1~6集在线观看| 欧美日韩在线观看一区二区三区| 蜜桃传媒麻豆第一区在线观看| 亚洲人做受高潮| 精品国产乱码久久久久久老虎| www.成人影院| 中文字幕制服丝袜在线| 不卡免费追剧大全电视剧网站| 国产精品久久久久久人| 日韩一区二区三区国产| 国产suv精品一区| 人妻内射一区二区在线视频| 国产精品全国免费观看高清| 国产黄色片网站| 欧美性在线视频| 99精品视频在线| 最新版天堂资源在线| 91豆麻精品91久久久久久| 国产黄色在线免费观看| 国产区一区二区三区| 久久久久91| 黄色一级视频在线观看| 精品亚洲国产成av人片传媒| 成人在线视频国产| 欧美s码亚洲码精品m码| 国产精品的网站| 无码精品人妻一区二区三区影院 | 国产第一页视频| 亚洲女与黑人做爰| 国产免费av高清在线| 超碰97在线播放| 久久99精品久久久久久动态图|