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

詳解Java泛型type體系整理

開發 后端
一直對jdk的ref使用比較模糊,早上花了點時間簡單的整理了下,也幫助自己理解一下泛型的一些處理。

一直對jdk的ref使用比較模糊,早上花了點時間簡單的整理了下,也幫助自己理解一下泛型的一些處理。

java中class,method,field的繼承體系

 

 

java中所有對象的類型定義類Type

 

 

說明:

Type : Type is the common superinterface for all types in the Java programming language. These include raw types, parameterized types, array types, type variables and primitive types.

使用

一般我們不直接操作Type類型,所以第一次使用會對這個比較陌生,相對內部的一些概念。

根據Type類型分類,整理了一個type -> class的轉換過程,同理也包括處理Generic Type。支持多級泛型處理。

Java代碼

 

  1. private static Class getClass(Type type, int i) {     
  2.         if (type instanceof ParameterizedType) { // 處理泛型類型     
  3.             return getGenericClass((ParameterizedType) type, i);     
  4.         } else if (type instanceof TypeVariable) {     
  5.             return (Class) getClass(((TypeVariable) type).getBounds()[0], 0); // 處理泛型擦拭對象     
  6.         } else {// class本身也是type,強制轉型     
  7.             return (Class) type;     
  8.         }     
  9.     }     
  10.     
  11.     private static Class getGenericClass(ParameterizedType parameterizedType, int i) {     
  12.         Object genericClass = parameterizedType.getActualTypeArguments()[i];     
  13.         if (genericClass instanceof ParameterizedType) { // 處理多級泛型     
  14.             return (Class) ((ParameterizedType) genericClass).getRawType();     
  15.         } else if (genericClass instanceof GenericArrayType) { // 處理數組泛型     
  16.             return (Class) ((GenericArrayType) genericClass).getGenericComponentType();     
  17.         } else if (genericClass instanceof TypeVariable) { // 處理泛型擦拭對象     
  18.             return (Class) getClass(((TypeVariable) genericClass).getBounds()[0], 0);     
  19.         } else {     
  20.             return (Class) genericClass;     
  21.         }     
  22.     }    

 

測試代碼:

Java代碼

 

  1. interface GeneircInteface {     
  2.     
  3.     T method1(T obj);     
  4. }     
  5.     
  6. interface CommonInteface {     
  7.     
  8.     Integer method2(Integer obj);     
  9. }     
  10.     
  11. class BaseGeneircInteface implements GeneircInteface {     
  12.     
  13.     protected R result;     
  14.     
  15.     @Override    
  16.     public R method1(R obj) {     
  17.         return obj;     
  18.     }     
  19.     
  20. }     
  21.     
  22. class GenericClass extends BaseGeneircIntefaceimplements GeneircInteface>, CommonInteface {     
  23.     
  24.     @Override    
  25.     public List method1(List obj) {     
  26.         result = obj;     
  27.         return result;     
  28.     }     
  29.     
  30.     public Integer method2(Integer obj) {     
  31.         return obj;     
  32.     }     
  33.     
  34.     public extends Throwable> T method3(T obj) throws E {     
  35.         return obj;     
  36.     }     
  37.     
  38. }    

 

針對class的泛型接口使用:

Java代碼

 

  1. private static void classGeneric() {     
  2.         System.out.println("\n--------------------- classGeneric ---------------------");     
  3.         GenericClass gc = new GenericClass();     
  4.         Type[] gis = gc.getClass().getGenericInterfaces(); // 接口的泛型信息     
  5.         Type gps = gc.getClass().getGenericSuperclass(); // 父類的泛型信息     
  6.         TypeVariable[] gtr = gc.getClass().getTypeParameters(); // 當前接口的參數信息     
  7.         System.out.println("============== getGenericInterfaces");     
  8.         for (Type t : gis) {     
  9.             System.out.println(t + " : " + getClass(t, 0));     
  10.         }     
  11.         System.out.println("============== getGenericSuperclass");     
  12.         System.out.println(getClass(gps, 0));     
  13.         System.out.println("============== getTypeParameters");     
  14.         for (TypeVariable t : gtr) {     
  15.             StringBuilder stb = new StringBuilder();     
  16.             for (Type tp : t.getBounds()) {     
  17.                 stb.append(tp + " : ");     
  18.             }     
  19.     
  20.             System.out.println(t + " : " + t.getName() + " : " + stb);     
  21.         }     
  22.     
  23.     }    

 

針對method的泛型接口使用:

Java代碼

 

  1. private static void methodGeneric() throws Exception {     
  2.         System.out.println("\n--------------------- methodGeneric ---------------------");     
  3.         GenericClass gc = new GenericClass();     
  4.         Method method3 = gc.getClass().getDeclaredMethod("method3"new Class[] { Object.class });     
  5.     
  6.         Type[] gpt3 = method3.getGenericParameterTypes();     
  7.         Type[] get3 = method3.getGenericExceptionTypes();     
  8.         Type gt3 = method3.getGenericReturnType();     
  9.         System.out.println("============== getGenericParameterTypes");     
  10.         for (Type t : gpt3) {     
  11.             System.out.println(t + " : " + getClass(t, 0));     
  12.         }     
  13.         System.out.println("============== getGenericExceptionTypes");     
  14.         for (Type t : get3) {     
  15.             System.out.println(t + " : " + getClass(t, 0));     
  16.         }     
  17.         System.out.println("============== getType");     
  18.         System.out.println(gt3 + " : " + getClass(gt3, 0));     
  19.     }    

 

針對field的泛型接口使用:

Java代碼

 

  1. private static void fieldGeneric() throws Exception {     
  2.         System.out.println("\n--------------------- fieldGeneric ---------------------");     
  3.         GenericClass gc = new GenericClass();     
  4.         Field field = gc.getClass().getSuperclass().getDeclaredField("result");     
  5.     
  6.         Type gt = field.getGenericType();     
  7.         Type ft = field.getType();     
  8.         System.out.println("============== getGenericType");     
  9.         System.out.println(gt + " : " + getClass(gt, 0));     
  10.         System.out.println("============== getType");     
  11.         System.out.println(ft + " : " + getClass(ft, 0));     
  12.     }    

 

輸出結果:

Java代碼

 

  1. --------------------- classGeneric ---------------------     
  2. ============== getGenericInterfaces     
  3. com.agapple.misc.GeneircInteface> : interface java.util.List     
  4. interface com.agapple.misc.CommonInteface : interface com.agapple.misc.CommonInteface     
  5. ============== getGenericSuperclass     
  6. interface java.util.List     
  7. ============== getTypeParameters     
  8.     
  9. --------------------- fieldGeneric ---------------------     
  10. ============== getGenericType     
  11. R : class java.lang.Object     
  12. ============== getType     
  13. class java.lang.Object : class java.lang.Object     
  14.     
  15. --------------------- methodGeneric ---------------------     
  16. ============== getGenericParameterTypes     
  17. T : class java.lang.Object     
  18. ============== getGenericExceptionTypes     
  19. E : class java.lang.Throwable     
  20. ============== getType     
  21. T : class java.lang.Object   

 

結果說明:

因為泛型的擦拭,對應的GeneircInteface和BaseGeneircInteface,在源碼信息已被擦除對應的類型,進行了upper轉型,所以取到的是Object。可以使用extends

GenericClass在類定義時,聲明了繼承父接口的泛型為List,所以再通過接口和父類獲取泛型信息時,是能正確的獲取。通過javap -v可以獲取對應的class信息

Java代碼

 

  1. const #46 = Asciz   Lcom/agapple/misc/BaseGeneircInteface;>;Lcom/agapple/misc/GeneircInteface;>;Lcom/agapple/misc/CommonInteface;;     

 

 

而在GenericClass中定義的方法method3,在class信息是一個被向上轉型后擦拭的信息。所以獲取method3的相關泛型信息是沒有的。

Java代碼

 

  1. method3;     
  2. const #36 = Asciz   (Ljava/lang/Object;)Ljava/lang/Object;;     
  3. const #37 = Asciz   Exceptions;     
  4. const #38 = class   #39;    //  java/lang/Throwable     
  5. const #39 = Asciz   java/lang/Throwable;     
  6. const #40 = Asciz   (TT;)TT;^TE;;     
  7. const #41 = Asciz   TT;;    

 

思考問題:

List list = new ArrayList(); 是否有獲取對應的String泛型信息? 不能,臨時變量不能保存泛型信息到具體class對象中,List和List對應的class實體是同一個。

Java代碼

 

  1. GeneircInteface gi = new GeneircInteface() {     
  2.     
  3.             @Override    
  4.             public Integer method1(Integer obj) {     
  5.                 return 1;     
  6.             }     
  7.     
  8.         };    

 

通過匿名類的方式,是否可以獲取Integer的泛型信息? 能,匿名類也會在進行class compiler保存泛型信息。

假如本文例子中的method3,是放在父類中BaseGeneircInteface中進行申明,GenericClass中指定R為List,是否可以獲取到對應的泛型信息? 不能,理由和問題1類似。

備注

具體泛型擦拭和信息保存,引用了撒迦的一段回復,解釋的挺詳盡了。

RednaxelaFX 寫道

Java泛型有這么一種規律:

位于聲明一側的,源碼里寫了什么到運行時就能看到什么;

位于使用一側的,源碼里寫什么到運行時都沒了。

什么意思呢?“聲明一側”包括泛型類型(泛型類與泛型接口)聲明、帶有泛型參數的方法和域的聲明。注意局部變量的聲明不算在內,那個屬于“使用”一側。

Java代碼

  1. import java.util.List;      
  2. import java.util.Map;      
  3.     
  4. public class GenericClass { // 1      
  5. private List list; // 2      
  6. private Map map; // 3      
  7.     
  8. public  U genericMethod(Map m) { // 4      
  9. return null;      
  10. }      
  11. }     

上面代碼里,帶有注釋的行里的泛型信息在運行時都還能獲取到,原則是源碼里寫了什么運行時就能得到什么。針對1的GenericClass,運行時通過Class.getTypeParameters()方法得到的數組可以獲取那個“T”;同理,2的T、3的java.lang.String與T、4的T與U都可以獲得。

這是因為從Java 5開始class文件的格式有了調整,規定這些泛型信息要寫到class文件中。以上面的map為例,通過javap來看它的元數據可以看到記錄了這樣的信息:

Javap代碼

  1. private java.util.Map map;      
  2. Signature: Ljava/util/Map;      
  3. Signature: length = 0x2      
  4. 00 0A     

乍一看,private java.util.Map map;不正好顯示了它的泛型類型被擦除了么?

但仔細看會發現有兩個Signature,下面的一個有兩字節的數據,0x0A。到常量池找到0x0A對應的項,是:

Javap代碼

  1. const #10 = Asciz Ljava/util/Map;;    

也就是內容為“Ljava/util/Map;”的一個字符串。

根據Java 5開始的新class文件格式規范,方法與域的描述符增添了對泛型信息的記錄,用一對尖括號包圍泛型參數,其中普通的引用類型用“La/b/c/D;”的格式記錄,未綁定值的泛型變量用“Txxx;”的格式記錄,其中xxx就是源碼中聲明的泛型變量名。類型聲明的泛型信息也以類似下面的方式記了下來:

Javap代碼

  1. public class GenericClass extends java.lang.Object      
  2. Signature: length = 0x2      
  3. 00 12      
  4. // ...      
  5. const #18 = Asciz Ljava/lang/Object;;    

詳細信息請參考官方文檔:http://java.sun.com/docs/books/jvms/second_edition/ClassFileFormat-Java5.pdf

相比之下,“使用一側”的泛型信息則完全沒有被保留下來,在Java源碼編譯到class文件后就確實丟失了。也就是說,在方法體內的泛型局部變量、泛型方法調用之類的泛型信息編譯后都消失了。

Java代碼

  1. import java.util.ArrayList;      
  2. import java.util.List;      
  3.     
  4. public class TestClass {      
  5. public static void main(String[] args) {      
  6. List list = null// 1      
  7. list = new ArrayList(); // 2      
  8. for (int i = 0; i < 10; i++) ;      
  9. }      
  10. }   

上面代碼中,1留下的痕跡是:main()方法的StackMapTable屬性里可以看到:

Java代碼

  1. StackMapTable: number_of_entries = 2      
  2. frame_type = 253 /* append */      
  3. offset_delta = 12      
  4. locals = [ class java/util/List, int ]      
  5. frame_type = 250 /* chop */      
  6. offset_delta = 11     

但這里是沒有留下泛型信息的。這段代碼只所以寫了個空的for循環就是為了迫使javac生成那個StackMapTable,讓1多留個影。

如果main()里用到了list的方法,那么那些方法調用點上也會留下1的痕跡,例如如果調用list.add("");,則會留下“java/util/List.add:(Ljava/lang/Object;)Z”這種記錄。

2留下的是“java/util/ArrayList."":()V”,同樣也丟失了泛型信息。

由上述討論可知,想對帶有未綁定的泛型變量的泛型類型獲取其實際類型是不現實的,因為class文件里根本沒記錄實際類型的信息。覺得這句話太拗口的話用例子來理解:要想對java.util.List獲取E的實際類型是不現實的,因為List.class文件里只記錄了E,卻沒記錄使用List時E的實際類型。

想對局部變量等“使用一側”的已綁定的泛型類型獲取其實際類型也不現實,同樣是因為class文件中根本沒記錄這個信息。例子直接看上面講“使用一側”的就可以了。

知道了什么信息有記錄,什么信息沒有記錄之后,也就可以省點力氣不去糾結“拿不到T的實際類型”、“建不出T類型的數組”之類的問題了orz

【編輯推薦】

  1. Java泛型的理解與等價實現
  2. Java泛型編程快速入門
  3. 淺談關于C#、Java泛型的看法
  4. 在Java中定義自己的工具庫
  5. Java技術在協同軟件中的應用
責任編輯:金賀 來源: JavaEye博客
相關推薦

2021-12-13 08:52:42

Go 泛型

2021-06-18 08:25:42

Java泛型通配符

2021-06-17 06:51:32

Java泛型Java編程

2024-10-22 16:59:07

2024-10-28 00:40:49

Go語法版本

2011-04-13 09:16:55

泛型

2021-07-01 06:47:30

Java泛型泛型擦除

2017-11-14 14:41:11

Java泛型IO

2009-07-30 14:00:21

ASP.NET 2.0

2021-07-09 06:11:37

Java泛型Object類型

2009-08-24 18:22:05

C# 泛型編程

2009-09-25 10:03:51

Java泛型

2009-12-24 09:16:11

C#泛型

2011-06-03 08:49:54

Java

2021-12-30 19:34:15

Java泛型JDK

2010-01-20 18:22:37

VB.NET泛型類型

2021-09-29 18:17:30

Go泛型語言

2020-10-20 10:17:20

Java泛型Type

2017-03-06 16:51:52

Java泛型實現

2020-02-21 08:18:58

JavaScala編程語言
點贊
收藏

51CTO技術棧公眾號

国产日韩一区| 天堂av在线电影| 噜噜噜躁狠狠躁狠狠精品视频 | 日日噜噜夜夜狠狠| 国产原创在线观看| 2023国产精品| av在线亚洲男人的天堂| 久久国产视频精品| 888久久久| 亚洲欧美精品一区| 国产91在线免费观看| 极品美女一区| 亚洲一区二三区| 一本色道久久综合亚洲二区三区 | 无码人妻精品一区二区三区9厂| 亚洲最大av| 亚洲香蕉成人av网站在线观看 | 亚洲欧美aⅴ...| 欧美激情一区二区三区在线视频| 99国产精品久久久久99打野战| 嫩草成人www欧美| 欧美精品www在线观看| 女人裸体性做爰全过| 日韩aaa久久蜜桃av| 日韩欧美国产麻豆| 91亚洲精品久久久蜜桃借种| 蜜臀国产一区| 精品色蜜蜜精品视频在线观看| 中国一级大黄大黄大色毛片| 国产一二三在线观看| 91在线观看污| 91久久精品国产91久久性色tv| 中文字幕第一页在线播放| 久久国产成人| 97超级碰在线看视频免费在线看 | 亚洲视频一区| 久久久精品久久| 久久精品日韩无码| 久久一级电影| 中文字幕久精品免费视频| aaaaa级少妇高潮大片免费看| 综合中文字幕| 日韩一区二区免费高清| 一二三级黄色片| 成人精品视频在线观看| 欧美三级电影一区| 亚洲综合欧美激情| 香蕉成人在线| 欧美日韩国产美女| 中文字幕av不卡在线| 91精品国产66| 欧美日韩在线播放| 99国产精品久久久久久| 91精品福利观看| 在线电影国产精品| 成人在线免费播放视频| 欧美日韩亚洲国产| 欧美日韩国产高清一区二区三区 | 亚洲综合免费观看高清完整版在线| 激情五月五月婷婷| 精品精品导航| 亚洲国产一区二区三区| 18禁免费观看网站| 美女日韩欧美| 欧美日韩国产色站一区二区三区| 三级黄色片播放| 99久久人爽人人添人人澡| 欧美精品一区二区蜜臀亚洲| 北岛玲一区二区| 精品不卡一区| 久久九九国产精品怡红院| 欧美日韩在线视频免费播放| 一区免费在线| 国产999精品久久久影片官网| 中文字幕精品一区二| 国产一区二区在线观看视频| 国产经典一区二区三区 | 18国产精品| 日韩精品欧美激情| 阿v天堂2014| 中文字幕免费一区二区三区| 97人人做人人爱| 国产九色91回来了| 懂色av中文一区二区三区 | 岛国在线视频| 亚洲欧美日韩精品久久久久| 人妻少妇精品无码专区二区| 韩日精品一区| 日韩一区二区视频| 欧美 变态 另类 人妖| 日韩精品一区二区久久| 欧美激情按摩在线| 中文字幕av影视| 床上的激情91.| 欧美激情专区| 免费看电影在线| 在线观看亚洲成人| 少妇献身老头系列| 欧美另类69xxxxx| 欧美极品美女视频网站在线观看免费 | 色吧影院999| 中字幕一区二区三区乱码| 婷婷丁香综合| 欧美在线观看视频| 99精品免费观看| 91亚洲午夜精品久久久久久| dy888午夜| 欧美电影h版| 欧美大片日本大片免费观看| 少妇的滋味中文字幕bd| 亚洲综合三区| 香蕉乱码成人久久天堂爱免费| 日韩av在线播放不卡| 欧美美女被草| 亚洲免费av片| 日韩av男人天堂| 精品午夜久久福利影院| 欧美一区二区三区精美影视| jizzjizz中国精品麻豆| 欧美福利视频一区| 婷婷综合在线视频| 久久精品国产清高在天天线| 国产精品一国产精品最新章节| 欧美激情免费| 欧美日韩亚洲综合在线 | 欧美—级高清免费播放| 一级片在线免费观看视频| 成人精品电影在线| 26uuu国产电影一区二区| 91九色国产ts另类人妖| 久久亚洲国产精品尤物| 亚洲一区免费| 99久久99久久| 久久精品视频免费看| 欧美少妇性性性| 久久丫精品忘忧草西安产品| 久久都是精品| 久久婷婷国产综合尤物精品| www在线观看黄色| 欧美tk—视频vk| 国产乱国产乱老熟300| 精品无人区卡一卡二卡三乱码免费卡| 一区二区三区在线观看www| 国产极品嫩模在线观看91精品| 亚洲图片欧美午夜| 亚洲综合图片网| 国产亚洲精品aa午夜观看| 亚洲人成无码www久久久| 国产日产一区| 国产精品激情自拍| 欧美α欧美αv大片| 一区二区三区人妻| 欧美精品综合| 国产精品一区二区在线观看| xxxx成人| 日韩精品视频免费在线观看| 影音先锋在线国产| 久久久777精品电影网影网| 国产一级片黄色| 日本不卡高清| 91久久久亚洲精品| 青春草免费在线视频| 亚洲电影在线看| 国产91在线观看| 亚洲一区二区黄| 国产黄网在线观看| 日本久久久精品视频| 亚洲涩涩在线| 日韩精品在线免费播放| 色av性av丰满av| 国产日韩欧美电影| 不卡中文字幕av| 无码人妻丰满熟妇奶水区码| 欧美激情一区在线| 久久久九九九热| 亚洲美女91| 日韩av一区二区三区在线| 日日狠狠久久| 欧美精品国产精品日韩精品| 你懂的好爽在线观看| 欧美精品乱码久久久久久| 久久一级黄色片| 久久久不卡网国产精品二区| 久久精品亚洲天堂| 亚洲人成毛片在线播放女女| 亚洲成色www久久网站| 91精品国产乱码久久久竹菊| 国产成人精品亚洲精品| 黄网页免费在线观看| 日韩精品视频观看| 国产精品女同一区二区| 狠狠爱在线视频一区| 久久国产高清视频| 91视频国产观看| 国产一区二区三区免费在线观看| 国产亚洲情侣一区二区无| 欧美美女日韩| 欧美成人在线免费视频| 九色视频成人自拍| 日韩欧美激情四射| 91精品免费观看| 日本少妇全体裸体洗澡| 国产亚洲欧洲997久久综合| 男人操女人下面视频| 久久精品网址| 99在线免费视频观看| 色综合狠狠操| 欧美激情论坛| 好吊妞视频这里有精品| 成人激情免费在线| 涩涩视频在线| 欧美高清一级大片| 在线免费av网站| 亚洲欧美中文日韩v在线观看| 亚洲AV无码一区二区三区少妇| 欧美探花视频资源| 91精品国产乱码久久久张津瑜| 亚洲欧美日韩人成在线播放| 日韩福利在线视频| 亚洲成av人片在www色猫咪| 波多野结衣家庭教师在线| 午夜片欧美伦| 亚洲成人自拍| 国产成人一区二区三区影院| 国产精品久久久久久久久久齐齐 | 日韩毛片在线免费观看| 中文字幕在线免费看线人 | 亚洲精品无码专区| 欧美天堂一区二区三区| 波多野结衣mp4| 欧美日韩在线视频观看| 久久夜靖品2区| 精品国产999久久久免费| 精品一区二区三区香蕉蜜桃| 北条麻妃69av| 宅男噜噜噜66一区二区| 裸体一区二区三区| 国产激情在线看| 久久综合国产| 亚欧精品在线| 狠狠操综合网| 日韩福利在线| 欧美另类69xxxxx| 欧美综合77777色婷婷| 天堂在线精品| 欧美一区二区三区在线免费观看 | 日韩一级片在线播放| 国产乱淫片视频| 欧美一区二区三级| www.热久久| 亚洲二区中文字幕| 色欲av伊人久久大香线蕉影院| 日韩经典一区二区三区| 日本wwwxxxx| 亚洲色图18p| 亚洲s色大片| 美女撒尿一区二区三区| 国产一线二线在线观看| 91a在线视频| 日本中文字幕一区二区| 91精品久久久久久久久久久久久久| 成人国产一区| 91精品久久香蕉国产线看观看| 亚洲三级av| 免费亚洲一区二区| 成人一区二区| 国产性生活免费视频| 国产精品一页| 最新天堂中文在线| 国产精品一区二区久久不卡| 日本免费福利视频| 国产精品美女久久久久久久久 | 亚洲精品黄色| 亚洲视频在线a| 国内精品视频666| 亚洲自拍偷拍精品| 日本一区二区在线不卡| 一区二区成人免费视频| 欧美日韩中文在线| 国产美女免费看| 日韩av网站大全| 免费a级毛片在线播放| 久久久久久中文| 成人国产精品入口免费视频| www.久久久| 国产在线日韩精品| h无码动漫在线观看| 视频一区二区中文字幕| 亚洲熟妇一区二区| 亚洲国产精品ⅴa在线观看| 精品99久久久久成人网站免费| 色综合久久久久综合体| 国产成人免费看一级大黄| 亚洲欧美制服第一页| 美女网站视频在线| 国产精品女人久久久久久| 天堂精品久久久久| 亚洲精品欧洲精品| 91久久黄色| 涩多多在线观看| 久久久精品国产99久久精品芒果| 精品国产乱码久久久久久鸭王1| 日韩欧美一区二区三区久久| 国产乱码精品一区二区| 亚洲色图av在线| av福利导福航大全在线| 成人福利在线观看| 国产一区二区三区日韩精品| 阿v天堂2018| 国产一区二区在线免费观看| 18精品爽国产三级网站| 色视频成人在线观看免| 日本免费一区视频| 欧美国产乱视频| 欧美国产视频| 日韩视频专区| 老鸭窝毛片一区二区三区| 国产精品成人无码专区| 亚洲永久免费视频| 国产丰满果冻videossex| 国产精品久久久久久久久免费相片| 亚洲一区二区三区香蕉| 欧美中文一区| 真人做人试看60分钟免费| 奇米一区二区三区| 中文字字幕码一二三区| 亚洲国产日韩综合久久精品| 97免费观看视频| 在线视频免费一区二区| 欧美大片免费观看网址| 免费成人看片网址| 99精品视频免费全部在线| 国产ts在线观看| 亚洲激情在线激情| 国产丰满果冻videossex| 免费不卡在线观看av| 国产一区二区高清在线| 欧美aaa在线观看| 国内久久婷婷综合| 亚洲国产123| 91精品国产黑色紧身裤美女| 国产在线观看a| 亚洲精品欧美日韩专区| 中文视频一区| 国模大尺度视频| 一区二区国产视频| 国产成人精品一区二三区四区五区| 久久久成人精品视频| 国产高清亚洲| 成年在线观看视频| 国产成人综合精品三级| 欧美黑人一级片| 亚洲大胆美女视频| 深夜成人在线| 日韩免费av一区二区三区| 美女视频第一区二区三区免费观看网站 | 亚洲综合图区| 成人综合电影| 亚洲大黄网站| 丰腴饱满的极品熟妇| 欧美日韩精品一区二区在线播放 | 午夜免费日韩视频| 网友自拍一区| 五月婷婷六月丁香激情| 亚洲免费观看高清完整版在线观看熊 | 深夜成人福利| 午夜在线视频免费观看| 国产**成人网毛片九色 | 国产高清精品在线| 天天综合网入口| 在线播放亚洲激情| 久久wwww| 一女被多男玩喷潮视频| 中文字幕巨乱亚洲| 精品人妻久久久久一区二区三区 | 亚洲天堂中文在线| 欧美日韩成人在线观看| 亚洲aa在线| 亚洲精品在线视频播放| 欧美色欧美亚洲高清在线视频| 天堂中文а√在线| 粉嫩精品一区二区三区在线观看| 亚洲中字黄色| 农村妇女精品一区二区| 日韩精品在线播放| 国产精品一区二区精品视频观看 | 精品3atv在线视频| 日本a在线天堂| 久久久久国色av免费看影院| 99国产精品久久久久久久成人 | 精品国产无码一区二区| 日韩免费在线看| 欧美色123| 国产在线免费av| 国产丝袜一区二区| 亚洲一区二区免费在线观看| 成年人网站大全| 亚洲图片欧美一区| 免费黄色在线观看| 日产精品高清视频免费|