久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

深入了解JAVA泛型

瀏覽:4日期:2022-08-31 13:34:33
什么是泛型

泛型的概念:Java泛型(generics)是JDK1.5中引入的一個新特性,泛型提供了編譯時的類型安全監測機制,該機制允許我們在編譯時檢測到非法的類型數據結構。

泛型的本質就是類型參數化,也就是所操作的數據類型被指定為一個參數。

使用泛型的好處:

1 在編譯期間提供了類型檢查

2 取數據時無須進行類型裝換

泛型類、接口泛型類

語法:

class 類名稱 <泛型標識,泛型標識,泛型標識,...> { private 泛型標識 變量名; // ...}

常用的泛型標識:T、E、K、V

使用語法:

類名 <具體的數據類型> 對象名 = new 類名<具體的數據類型>();

JDK 1.7 之后,后面的 <> 中的具體的數據類型可以省略不寫。

定義一個簡單的泛型類:

/** * 泛型類 T:類型形參,在類創建對象時,指定具體的數據類型 * @author rainszj * 2020/3/19 */public class GenericDemo01<T> { private T value; public GenericDemo01() { } public GenericDemo01(T value) { this.value = value; } @Override public String toString() { return 'GenericDemo01{' + 'value=' + value + ’}’; } public T getValue() { return value; } public void setValue(T value) { this.value = value; }}

測試一下:

public class Test { public static void main(String[] args) { // 在創建對象時指定具體的數據類型 GenericDemo01<String> genericDemo01 = new GenericDemo01<>('java'); // 泛型類不支持基本數據類型,但可以使用基本類型對應的包裝類 GenericDemo01<Integer> genericDemo02 = new GenericDemo01<>(1); // 在泛型類對象時,不指定具體的數據類型,將會使用Object類型來接收 // 同一個泛型類,根據不同數據類型創建的對象,本質上是同一類型,公用同一個類模板 // class com.rainszj.GenericDemo01 System.out.println(genericDemo01.getClass()); // class com.rainszj.GenericDemo01 System.out.println(genericDemo02.getClass()); // true System.out.println(genericDemo01.getClass() == genericDemo02.getClass()); }}

注意事項:

泛型類,如果沒有指定具體的數據類型,按Object類型來接收

泛型的類型參數只能是類類型,也就是引用數據類型,不能是基本數據類型

泛型類型在邏輯上可以看成是多個不同的類型,但實際上都是相同類型

/** * 抽獎池 * * @author rainszj * 2020/3/19 */public class ProductGetter<T> { // 獎品 private T product; private ArrayList<T> list = new ArrayList<>(); /** * 添加獎品 * * @param product */ public void addProduct(T product) { list.add(product); } /** * 抽取隨機獎品 * * @return */ public T getProduct() { return list.get(new Random().nextInt(list.size())); } @Override public String toString() { return 'ProductGetter{' + 'product=' + product + ’}’; }}public static void main(String[] args) { ProductGetter<String> productGetter1 = new ProductGetter<>(); // 獎品類型 禮物 String[] products1 = {'華為手機', '蘋果手機', '掃地機器人', '微波爐'}; // 添加獎品 for (int i = 0, length = products1.length; i < length; i++) { productGetter1.addProduct(products1[i]); } // 獲取獎品 String product1 = productGetter1.getProduct(); System.out.println('恭喜您抽中了,' + product1.toString()); ProductGetter<Integer> productGetter2 = new ProductGetter<>(); // 獎品類型 money Integer[] products2 = {1000, 3000, 10000, 500}; for (Integer money : products2) { productGetter2.addProduct(money); } Integer product2 = productGetter2.getProduct(); System.out.println('恭喜您抽中了,' + product2.toString());}從泛型類派生子類

子類也是泛型類,子類的泛型標識 T 要和父類的泛型標識 T 保持一致,或者是包含關系,子類的泛型標識包含父類的泛型標識

class ChildGeneric<T> extends ParentGeneric<T>class ChildGeneric<T, E> extends ParentGeneric<T>

子類不是泛型類,父類要明確泛型的數據類型

class ChildGeneric extends ParentGeneric<String>泛型接口

語法:

interface 接口名稱 <泛型標識,泛型標識,...> { 泛型標識 方法名();}

實現泛型接口的類,不是泛型類,需要明確實現泛型接口的數據類型

public class Apple implements Generic<String> {}

實現類也是泛型類,實現類和接口的泛型類型要一致,或者是包含關系,實現類的泛型標識包含泛型接口的泛型標識

public class Apple<K> implements Generic<K> {}public class Apple<K, V> implements Generic<K> {}

定義一個泛型接口

public interface Generic<K> { K getKey();}

實現其中方法:

/** * 泛型接口的實現類,是一個泛型類, * 那么要保證實現接口的泛型類的泛型標識包含泛型接口的泛型標識 */public class Pair<K, V> implements Generic<K> { private K key; private V value; public Pair() { } public Pair(K key, V value) { this.key = key; this.value = value; } @Override public K getKey() { return key; } public V getValue() { return value; } @Override public String toString() { return 'Pair{' + 'key=' + key + ', value=' + value + ’}’; }}

測試:

public class MyTest { public static void main(String[] args) { Pair<String, Integer> pair = new Pair<>('數學', 100); System.out.println(pair.toString()); // Pair{key=數學, value=100} }}泛型方法普通泛型方法

泛型類,是在實例化類時指明泛型的具體類型。

泛型方法,是在調用方法時,指明泛型的具體類型。

語法:

修飾符 <T,E,...> 返回值類型 方法名(形參列表) { // 方法體...}

public 與返回值中間 <T,E,...> (泛型列表)非常重要,可以理解為聲明此方法為泛型方法。

只有聲明了 <T,E,...> 的方法才是泛型方法,泛型類中使用了泛型的成員方法并不是泛型方法

<T> 表明該方法將使用泛型類型 T,此時才可以在方法中使用泛型類型 T。

public class ProductSetter<T> { private T product; private Random random= new Random(); private ArrayList<T> list = new ArrayList<>(); public void addProduct(T product) { list.add(product); } /** * @param list * @param <E> 泛型方法的類型,是在調用泛型方法時確定的 * @return */ public <E> E getProduct(ArrayList<E> list) { return list.get(random.nextInt(list.size())); } public T getProduct() { return list.get(random.nextInt(list.size())); } @Override public String toString() { return 'ProductSetter{' + 'product=' + product + ’}’; }}

測試:

public static void main(String[] args) { ProductSetter<String> productSetter = new ProductSetter<>(); String[] products1 = {'華為手機', '蘋果手機', '掃地機器人', '微波爐'}; for (int i = 0; i < products1.length; i++) { productSetter.addProduct(products1[i]); } System.out.println(productSetter.getProduct()); ArrayList<String> list1 = new ArrayList<>(); list1.add('華碩電腦'); list1.add('蘋果電腦'); list1.add('華為電腦'); String product1 = productSetter.getProduct(list1); System.out.println(product1 + 't' + product1.getClass().getSimpleName()); // 華為電腦 String ArrayList<Integer> list2 = new ArrayList<>(); list2.add(1); list2.add(2); list2.add(3); Integer product2 = productSetter.getProduct(list2); System.out.println(product2 + 't' + product2.getClass().getSimpleName()); // 2 Integer}靜態泛型方法

public static <T, E, K> void pringType(T k1, E k2, K k3) { System.out.println(k1 + 't' + k1.getClass().getSimpleName()); System.out.println(k2 + 't' + k2.getClass().getSimpleName()); System.out.println(k3 + 't' + k3.getClass().getSimpleName());}// 方法的調用ProductSetter.pringType(1, 'hello', false);

// 輸出結果1 Integerhello Stringfalse Boolean

注意:

// 在泛型類中無法添加靜態的 帶有泛型成員方法,但可以添加靜態的 泛型方法public class Test<T> { // 帶有泛型的成員方法// 錯誤public static T getKey(T key) { return key;} // 泛型方法// 正確public static <E> E getKey(E key) { return key;}}泛型方法中的可變參數

public class MyTest { public static void main(String[] args) { MyTest.print(1, 2, 3); } /** * 泛型方法中的可變長參數 * @param value * @param <E> */ public static <E> void print(E ... value) { for (int i = 0; i < value.length; i++) { System.out.println(value[i]); } }}

總結:

泛型方法能使方法獨立于類而產生變化。

如果 static 方法要使用泛型能力,就必須使其成為泛型方法。

類型通配符

類型通配符一般是使用 ? 代替具體的類型實參。

類型通配符是類型實參,而不是類型形參。

我們先來定義一個簡單的泛型類:

public class Box<T> { private T width; public static void showBox(Box<Number> box) { Number width = box.getWidth(); System.out.println(width); } public T getWidth() { return width; } public void setWidth(T width) { this.width = width; }}

main方法:

public static void main(String[] args) { Box<Number> box1 = new Box<Number>(); box1.setWidth(100); showBox(box1);}

當我們在 main 方法中增加這一段代碼時,就會報錯

Box<Integer> box2 = new Box<>();box2.setWidth(200);showBox(box2);

雖然 Integer 類繼承自 Number 類,但在類型通配符中不存在繼承這一概念!

也許你會使用方法的重載,但是 在同一個泛型類中,根據不同數據類型創建的對象,本質上是同一類型,公用同一個類模板,所以無法通過方法的重載,傳遞不同的泛型類型。

這時可以使用類型通配符 ?,來代表具體的類型實參!

public static void showBox(Box<?> box) { Object width = box.getWidth(); System.out.println(width);}類型通配符的上限

在我們上面的showBox()代碼中,發現 box.getWidth()得到的還是Object類型,這和我們不使用類型通配符,得到的結果是一樣的。這時我們可以使用類型通配符的上限。

語法:

類/接口 <? entends 實參類型>

要求該泛型的類型,只能是實參類型,或者是實參類型的子類類型。

public static void showBox(Box<? extends Number> box) { Number width = box.getWidth(); System.out.println(width);}public static void main(String[] args) { Box<Integer> box2 = new Box<>(); box2.setWidth(200); showBox(box2);}

使用類型通配符的下限,無法得知該類型具體是指定的類型,還是該類型的子類類型,因此無法在 List 集合中執行添加該類或者該類子類的操作!

public static void showAnimal(List<? extends Cat> list) { // 錯誤 list.add(new Cat()); list.add(new MiniCat());}類型通配符的下限

語法

類/接口 <? super 實參類型>

要求該泛型的類型,只能是實參類型,或者是實參類型的父類類型。

下面通過 TreeSet 集合中的一個構造方法來進一步理解 類型通配符的下限

public TreeSet(Comparator<? super E> comparator) { this(new TreeMap<>(comparator));}

首先是一個Animal類,只有一個 name 屬性

public class Animal { private String name; public Animal(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return 'Animal{' + 'name=’' + name + ’’’ + ’}’; }}

然后它的一個子類,Cat添加一個屬性:age

public class Cat extends Animal { private int age; public Cat(String name, int age) { super(name); this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return 'Cat{' + 'age=' + age + ’}’; }}

最后是 Cat 的子類,MiniCat,再添加一個屬性 level

public class MiniCat extends Cat { private int level; public MiniCat(String name, int age, int level) { super(name, age); this.level = level; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } @Override public String toString() { return 'MiniCat{' + 'level=' + level + ’}’; }}

測試,首先我們要在MyTest類通過靜態內部類的方式,實現比較的接口,在構造TreeSet時,傳遞比較器

public class MyTest { public static void main(String[] args) { // 正常 // TreeSet<Cat> animals = new TreeSet<Cat>(new Comparator1()); // 正常 TreeSet<Cat> animals = new TreeSet<Cat>(new Comparator2()); // 報錯// TreeSet<Cat> animals = new TreeSet<Cat>(new Comparator3()); List<Cat> list = Arrays.asList(new Cat('a', 12), new Cat('c', 9), new Cat('b', 20)); animals.addAll(list); animals.forEach(System.out::println); } public static class Comparator1 implements Comparator<Animal> { @Override public int compare(Animal o1, Animal o2) { return o1.getName().compareTo(o2.getName()); } } public static class Comparator2 implements Comparator<Cat> { @Override public int compare(Cat o1, Cat o2) { return o1.getAge() - o2.getAge(); } } public static class Comparator3 implements Comparator<MiniCat> { @Override public int compare(MiniCat o1, MiniCat o2) { return o1.getLevel() - o2.getLevel(); } }}

結論:

通過以上的比較,我們可以看出,類型通配符的下限,只能傳遞實參類型的或者實參類型的父類類型。

我們每次比較使用的都是 Cat 類型,但在 Comparator1比較的是 Animal 中的 name 屬性,這是因為 我們在初始化 Cat 對象的時候,一定會先初始化 Animal 對象,也就是創建子類對象的時候,一定會先創建父類對象,所以才可以進行比較。

如果是使用 類型通配符的上限,在創建對象時,比較的是該類的子類對象中的屬性,就會造成空指針異常!也就是Comparator3無法使用的原因, 所以在 TreeSet 中才會使用 <? super E> ,類型通配符的下限。

類型擦除

泛型是Java 1.5 引進的概念,在這之前是沒有泛型的,但是,泛型代碼能夠很好地和之前的代碼兼容。那是因為,泛型信息只存在編譯階段,在進入 JVM 之前,與泛型相關的信息會被擦除掉,我們稱之為——類型擦除

無限類型擦除

先定義一個泛型類:

public class Erasure<T> { private T key; public T getKey() { return key; } public void setKey(T key) { this.key = key; } }

輸出結構:

public static void main(String[] args) { Erasure<Integer> erasure = new Erasure<>(); Class<? extends Erasure> cls = erasure.getClass(); Field[] fields = cls.getDeclaredFields(); for (Field field : fields) { System.out.println(field.getName() + ':' + field.getType().getSimpleName()); // key:Object }}

可以發現在編譯完成后的字節碼文件中,T --> Object 類型

有限類型擦除

還是剛才的泛型類,只不過加了泛型的上限

public class Erasure<T extends Number> {// ...}

測試不變,輸出結果:

key:Number

當我們指定了泛型的上限時,它會將我們的泛型擦除為上限類型

同樣對泛型方法,也是一樣的道理

// 泛型方法public <E extends List> E test(E t) { return t;}

Method[] methods = cls.getDeclaredMethods();for (Method method : methods) { System.out.println(method.getName() + ':' + method.getReturnType().getSimpleName());}// 輸出結果// getKey:Number// test:List// setKey:void橋接方法

泛型接口

public interface Info<T> { T test(T value);}

泛型接口的實現類

public class InfoImpl implements Info<Integer> { @Override public Integer test(Integer value) { return value; }}

測試

public static void main(String[] args) { Class cls = InfoImpl.class; Method[] methods = cls.getDeclaredMethods(); for (Method method : methods) { System.out.println(method.getName() + ':' + method.getReturnType().getSimpleName()); }}// 輸出結果:// test:Integer// test:Object

原本 InfoImpl 中只是實現了 Info 接口中的一個方法,但通過反射卻拿到了兩個方法。其中返回值為 Object 的方法就是橋接方法。

在編譯完成后,類型擦除的結果是這樣的:

public interface Info { Object test(Object value);}

public class InfoImpl implements Info { public Integer test(Integer value) { return value; } // 橋接方法:保持接口和類的實現關系 @Override public Object test(Object value) { return (Integer)value; }}泛型數組

開發中,一般常用的是泛型集合

泛型數組的創建:

可以聲明帶泛型的數組引用,但是不能直接創建帶泛型數組對象。

可以通過 java.lang.reflect.Array 的 newInstance(Class<T>, int)創建 T[ ] 數組。

// 可以創建帶泛型的數組引用ArrayList<String>[] arrayLists1 = new ArrayList[3];// 無法創建帶泛型的數組對象ArrayList<String>[] arrayLists2 = new ArrayList<String>[3];

簡單使用 java.lang.reflect.Array 的 newInstance(Class<T>, int)創建 T[ ] 數組。 封裝一個泛型數組

public class GenericArray<T> { private T[] array; public GenericArray(Class cls, int length) { this.array = (T[]) Array.newInstance(cls, length); } public void put(int index, T item) { this.array[index] = item; } public T get(int index) { return this.array[index]; } public T[] getArray() { return this.array; } public static void main(String[] args) { GenericArray<String> ga = new GenericArray<>(String.class, 3); ga.put(0, '白虎'); ga.put(1, '青龍'); ga.put(2, '朱雀'); System.out.println(Arrays.toString(ga.getArray())); }}泛型和反射

反射常用的泛型類:

Class

Constructor

通過反射創建對象,帶泛型和不帶泛型

Class<Cat> catClass1 = Cat.class;try { Constructor<Cat> c1 = catClass1.getConstructor(); Cat cat = c1.newInstance();} catch (Exception e) { e.printStackTrace();}Class catClass2 = Cat.class;try { Constructor c2 = catClass2.getConstructor(); Object cat2 = c2.newInstance();} catch (Exception e) { e.printStackTrace();}

以上就是深入了解JAVA泛型的詳細內容,更多關于JAVA泛型的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: h在线视频 | 亚洲精品一二三区 | av国产精品| 黄色国产在线看 | 国产成人精品a视频一区www | 亚洲国产一区视频 | 三区影院 | 亚洲国产91 | 91视频在线看 | 久久久91精品国产一区二区精品 | 成人精品一区二区三区中文字幕 | 精品国产乱码简爱久久久久久 | 国产精品久久久爽爽爽麻豆色哟哟 | 欧美a一级 | 日本天天操 | 黄色片免费观看网站 | 亚洲第一页中文字幕 | 精品欧美一区二区在线观看 | 亚洲视频一 | 91亚洲国产成人精品性色 | 一区二区三区在线免费观看 | 日韩素人一区二区三区 | 国产精品久久久久久网站 | 日韩国产在线观看 | 日本三级网站在线观看 | 手机看片国产精品 | 成av在线 | 久久中文字幕视频 | 日本三级黄色录像 | 日本淫视频 | 日韩精品影院 | 一级片在线观看免费 | 国产在线精品一区二区三区 | 日日爽天天操 | 国产精品视频入口 | 吴梦梦到粉丝家实战华中在线观看 | 久草高清在线 | 剑来高清在线观看 | 日韩精品一区二区三区中文字幕 | 亚洲一区二区高清视频 | 亚洲97色 | 久久免费小视频 | 日韩免费网站 | 欧洲亚洲一区 | 日韩av一级片 | 精品国产91久久久久久久 | 色精品 | 影音先锋亚洲资源 | 在线播放国产一区二区三区 | 日韩福利在线观看 | 人人玩人人干 | 国产精品一区二区三区在线播放 | 欧美一级一区 | 综合网在线| 亚洲激情一区二区 | 91精品久久久久久久久久入口 | 国产精品一区二区三区在线 | 精品一区二区三区蜜桃 | 欧美一区二区大片 | 国产特级毛片 | 麻豆国产一区二区三区四区 | 99成人| 亚洲免费不卡视频 | jav成人av免费播放 | 亚洲精品在 | 国产精品粉嫩白浆在线观看 | 日韩第一页 | 最近最新中文字幕 | 亚洲欧美日韩一区 | www.久久| 91中文视频 | 国产精品一区久久久 | 欧美日韩精品一区二区三区 | 二区久久 | 亚洲一区二区三区中文字幕 | 欧美一级全黄 | 亚洲一区成人在线观看 | av大片 | 欧美午夜一区二区三区免费大片 | 欧美国产在线观看 | 中文字幕一区二区三区四区 | 青青久久北条麻妃 | 成人午夜免费视频 | 成人国产电影 | 久久免费视频9 | 成人精品一区二区三区中文字幕 | 日本亚洲精品一区二区三区 | 91一区二区在线 | 99久久婷婷国产综合精品 | 中文字幕亚洲一区 | 欧美精品99 | 伊人电院网 | 国产日韩欧美激情 | 韩国精品一区二区 | 亚洲综合视频 | 亚洲国产精品一区二区久久,亚洲午夜 | 一级毛片在线 | 一区二区免费在线视频 | 欧美爱爱视频 | 狠狠夜夜 | 成人三级视频网站 | 日日操天天操 | 久久久久久久久久久久国产精品 | 国产精品视频久久 | 中文字幕一区二区三区免费视频 | 91精品国产综合久久精品 | 欧美二区精品 | 亚洲精品视频免费 | 国产一区二区三区四区三区 | 日韩国产欧美亚洲 | 欧美天堂在线观看 | 亚洲av毛片一区二二区三三区 | 欧美国产综合一区 | 亚洲午夜精品一区二区三区 | 国产成人精品一区二 | 伊人网在线视频免费观看 | 日韩激情免费视频 | 黄色毛片在线看 | 亚洲综合在 | 狠狠艹| 91精品国产综合久久福利软件 | 丝袜久久 | 一区二区三区免费看 | 欧美日韩另类在线 | 在线播放国产一区二区三区 | 国产一级中文字幕 | 亚洲午夜视频在线观看 | 在线观看国产 | 国产日韩精品一区二区 | 日韩精品久久久 | 日韩在线观看视频一区二区 | 国产成人精品一区二区三区视频 | 狠狠色丁香婷婷综合 | 日韩精品视频在线观看免费 | 美女久久久| 黄色的视频免费 | 粉嫩高清一区二区三区精品视频 | 久在线 | 久久99久久99精品免视看婷婷 | 中国女人黄色大片 | 日韩欧美在线观看视频 | 91小视频| 国产无区一区二区三麻豆 | 亚洲精品日韩综合观看成人91 | 国产一区二区三区久久 | 国产日韩欧美综合 | 亚洲精品网址 | 国产一区二区三区视频 | 国产成人精品免费视频大全最热 | 免费观看一区二区三区毛片软件 | 久久视频国产 | 国产日产精品一区二区三区四区 | 国产高清视频一区二区 | 精国产品一区二区三区四季综 | 亚洲精品www久久久久久广东 | 黑人精品xxx一区一二区 | 亚州综合一区 | 久久99精品久久久久久噜噜 | 干狠狠 | 免费黄在线看 | 亚洲精品日韩综合观看成人91 | 蜜桃视频在线播放 | 另类天堂 | 精品久久久久久久久久久久久久 | 亚洲成人久久久 | 国产精品久久久久久亚洲调教 | 午夜影院普通用户体验区 | 亚洲国产精品自拍 | www久久久久久久 | 激情综合在线 | 91豆花视频| 成人黄色在线视频 | 草草成人 | 呦一呦二在线精品视频 | 亚洲视频中文字幕 | 久久av网| 91av在| 精品久久久久一区二区三区 | 国产日韩欧美精品一区二区三区 | 亚洲国产精品一区二区三区 | 日本成人中文字幕 | 久久精品手机视频 | 午夜性电影 | av黄在线观看 | av免费观看网站 | 在线国产一区二区 | 33eee在线视频免费观看 | 亚洲一区二区三区四区在线观看 | 国产一区二区久久久 | 伊人手机在线视频 | 人人爽在线观看 | 国产免费高清 | 精品中文字幕一区二区三区 | 99精品视频网 | aⅴ色国产 欧美 | 日韩激情视频一区 | 欧美一区二区大片 | 欧美日韩一区不卡 | 蜜月久综合久久综合国产 | 国产综合精品视频 | 北条麻妃一区二区三区在线观看 | 日韩一区二区三区在线播放 | 蜜桃免费一区二区三区 | 久久91精品久久久久久9鸭 | 亚洲综合色视频在线观看 | 亚洲精品一区在线观看 | 亚洲欧洲日本国产 | 欧美久久久久久 | 久久伊人影院 | 日本久久久久久久久 | av免费观看网站 | 精品欧美黑人一区二区三区 | 亚洲高清在线 | 精品久久久久久久久久 | 国产精品久久免费视频在线 | 色av综合| 国产欧美精品一区二区 | 久久久久亚洲一区二区三区 | 亚洲免费视频一区二区 | 在线一区观看 | 国产精品成人一区二区三区夜夜夜 | 精品久久一二三区 | 91国产精品| 成人免费视频网 | 国产综合精品 | 国产电影一区二区三区图片 | 在线亚州 | 影音先锋中文字幕在线 | 亚洲www视频 | 日韩视频一区二区三区 | 中文字幕在线一区二区三区 | 欧洲一级毛片 | 国产精品无码永久免费888 | 电影k8一区二区三区久久 | 日韩av成人| 成人在线手机版视频 | 亚洲高清视频在线 | 中文字幕亚洲一区二区三区 | chinese中国真实乱对白 | 欧美精品成人一区二区三区四区 | 日本高清视频在线播放 | 日本视频免费高清一本18 | 一区二区三区国产好 | 日韩三级在线免费观看 | 激情久久久 | 在线色网站 | 亚洲精品乱码久久久久久蜜桃 | 日本五月婷婷 | 中文字幕在线免费 | 欧美第一色 | 91社区在线观看 | 成人aaaa| 成人欧美一区二区三区视频xxx | 亚洲一区二区三区在线视频 | 国产精品久久久久不卡 | 日本一级在线观看 | 成人免费视频观看视频 | 免费黄色在线视频网址 | 久久影音先锋 | 黄色成人免费看 | 久久精品国产一区二区电影 | 日韩在线一区二区 | 久久毛片 | 久草精品视频在线播放 | 伊人免费视频 | 欧美日韩一区二区视频在线观看 | 中文字幕精品一区二区三区精品 | 欧美日韩精品一区二区在线观看 | 在线播放国产一区二区三区 | 国产高清在线精品一区二区三区 | 国产精品黄网站在线观看 | 午夜精品久久久久久久男人的天堂 | 国产一区二区三区在线 | 精品久久久久久 | www.日韩.com | 国产高清免费 | 午夜精品久久久久久久男人的天堂 | 欧美成人性生活视频 | 欧美精品一区二区三区蜜桃视频 | 美女视频一区 | 欧美日韩三级 | 国产精品久久久久久久久久东京 | 午夜精品久久久久久久久久久久 | 欧美激情一区二区 | 成人影音| 国产欧美一区二区 | 久久另类ts人妖一区二区 | 久久精品亚洲精品 | 精品久久久久久久 | 波多野结衣电影一区 | 激情网站免费观看 | 免费在线看a | sis色中色 | 日韩欧美高清dvd碟片 | 久久最新 | 日韩中字在线观看 | 国产一区二区三区精品久久久 | 日本精品免费观看 | 欧美全黄| 久久精品国产免费 | 中文字幕第100页 | 日本综合视频 | 久久久999国产 | 国产精品网站在线观看 | 国产成人精品久久二区二区 | 国产一级片免费观看 | 日韩91 | 午夜免费小视频 | 国产片侵犯亲女视频播放 | 欧美亚洲视频 | 久久久久久久国产精品视频 | 欧美精品色| 可以在线观看的av网站 | www.日韩 | 日本亚洲最大的色成网站www | 一区二区三区精品 | 色吧av| 一区二区三区视频 | 天堂亚洲 | 亚洲黄色一区二区 | 久久视频一区 | 亚洲国产青草 | 久久久久久久久综合 | 在线观看免费成人av | 国产精品国产三级国产aⅴ入口 | 操操网| 日韩av一区二区三区在线 | 操操操av | 精品久久久网站 | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 欧美一区2区三区4区公司二百 | 午夜爱爱毛片xxxx视频免费看 | 欧洲一区| 日本一级中文字幕久久久久久 | 亚洲一区视频 | 韩国精品主播一区二区在线观看 | 97超碰在线播放 | 午夜私人影院 | 三区视频 | 国产激情视频在线观看 | 亚洲国产精品一区二区三区 | 亚洲第1页 | 亚洲成人三区 | 国产精品久久久久久久久久10秀 | 黄色网页在线观看 | 日韩精品观看 | 国产日韩精品视频 | 天天操天天草 | 国产精品国产 | 黄色在线免费观看 | 毛片在线免费 | 欧洲亚洲精品久久久久 | 欧美成年黄网站色视频 | 黄色片在线免费看 | 成人国产精品久久久 | 久久99精品久久久久久久青青日本 | 欧美性视频网站 | 黄色大片在线播放 | 精品福利在线视频 | www.se天堂| 麻豆网址| 精品国产一区二区在线 | 一区二区国产在线 | 中文日韩在线 | 欧美男人天堂 | 999在线视频免费观看 | 久久激情综合 | 日本videos18高清hd下 | 91久久久久久久久久久 | 亚洲国产成人av好男人在线观看 | 一区二区三区影院 | 超碰在线99 | 亚洲精品久久久久久下一站 | 国产精品综合一区二区 | 国产一级二级毛片 | 国产一区视频在线 | 国产一区二区三区久久久久久久久 | av中文字幕在线播放 | 欧美日韩一区二区在线 | 日韩欧美在线播放 | 在线一区二区免费 | 在线毛片观看 | 91综合在线观看 | 九九国产 | 日韩精品在线一区 | 亚洲精品一区二区三区在线播放 | 伊人激情综合网 | 欧洲精品久久久 | 99精品视频免费 | 日韩中文字幕精品 | 日本在线观看 | 国产精品久久久久久久久免费桃花 | 亚洲精品一区二区三区蜜桃下载 | 密室大逃脱第六季大神版在线观看 | 国产成人精品一区二区三区四区 | 国产亚洲一区二区在线 | 久久视频精品 | 在线精品亚洲欧美日韩国产 | 91大神免费在线观看 | 天天久久| 欧美日韩高清不卡 | 国产91色 | 欧美日韩视频一区二区 | 日韩在线视频第一页 | 欧美日韩精品一区 | 国产精品色在线网站 | 国产精品123 | 欧美日韩在线播放 | 奇米色777欧美一区二区 | 亚洲国产视频一区 | 亚洲动漫在线观看 | 午夜成人在线视频 | 成人国产在线 | 麻豆一区一区三区四区 | 久久国内免费视频 | 日韩性欧美 | 草视频在线 | 国产成人一区二区三区影院在线 | 九色av| 午夜一级黄色片 | 亚洲一区二区三区在线 | 国产高清在线精品一区二区三区 | 亚洲男人天堂网 | 成人免费视频网站在线看 | 国产精品久久久久久一区二区三区 | 中文字幕精品一区久久久久 | 久日精品| 国产在线精品一区 | 亚洲精品乱码 | 一级在线观看 | 亚洲专区中文字幕 | 中文字幕av第一页 | 国产精品久久久久久久一区探花 | 久草热8精品视频在线观看 亚洲区在线 | 日韩极品在线 | 亚洲另类小视频 | 日韩一区二区三区精品 | 亚洲精品二三区 | 欧美a一级 | 性欧美精品高清 | 亚洲成人三级 | 刺激网| 欧美夜夜骑 | 亚洲午夜视频在线观看 | 欧美在线免费 | 成人午夜视频在线观看 | 中国电影黄色一级片免费观看 | 成人精品一区二区 | 女同videos另类 | 亚洲视频在线观看一区二区三区 | 欧美日韩国产一区二区三区不卡 | 欧美涩涩网 | 在线日韩| 一区二区av | 亚洲精品乱码久久久久久蜜桃不卡 | 亚洲一区 国产 | 在线观看成人 | h片观看| 亚洲一区二区中文字幕 | 黄色一级免费电影 | 亚洲一区二区av | 亚洲国产精品久久久久婷婷老年 | 欧美综合一区 | a成人在线 | 久久精品一区二区三区四区 | 久久成人免费 | 日日干狠狠干 | 黑人巨大精品欧美一区二区小视频 | 国产伦精品一区二区三区四区视频 | 三a毛片 | 可以免费看黄视频的网站 | 婷婷色视频 | 国产综合精品一区二区三区 | 国产一在线 | 欧美日韩一级在线观看 | 中文字幕高清av | 中文字幕在线三区 | 成年人黄色一级毛片 | 成人观看免费视频 | 99精品一区| 91亚洲国产成人久久精品网站 | 国产欧美一区二区 | 可以免费在线观看av的网站 | 亚洲精片| 在线色网站| 久久99国产伦子精品免费 | 97久久精品人人做人人爽50路 | 亚洲精品在线看 | 中文字幕 在线观看 | 成人av一区二区三区 | 成人免费视频网站在线看 | 人成亚洲 | 欧美日韩综合视频 | 久在线视频 | 国产成人精品av | 中字一区| 一区二区在线电影 | 91社区在线高清 | 色乱码一区二区三区网站 | 久久一级| 国产黄网 | 精品中文字幕一区二区三区 | 九九久久久 | 久久国产视频一区二区 | 最新中文字幕久久 | 极品女神高潮呻吟av久久 | 一区二区视频 | 99爱在线观看 | 欧美一区二区三区在线观看视频 | 国产 亚洲 网红 主播 | 日本一区二区三区在线视频 | 久久99精品久久久久久久青青日本 | 亚洲一区二区三区免费在线观看 | 国产精品99久久免费观看 | 成人在线一区二区三区 | 欧美国产在线视频 | 久久青| 精品久久久久久久久久久院品网 | 特黄一级 | 精品香蕉一区二区三区 | 黄色短视频在线观看 | 欧美色综合天天久久综合精品 | 一区二区三区国产在线 | www.久草| 一区二区三区久久 | 日韩超碰 | 成人免费视频网站在线观看 | 午夜久久网站 | 日本亚洲精品成人欧美一区 | 中文字幕高清在线 | 99久久婷婷 | 午夜免费福利电影 | 成人精品一区二区三区中文字幕 | 一区二区不卡视频 | av在线精品| 色爱综合| 播放一级黄色片 | 久草青青| 欧美一区二区三区国产精品 | 三级精品 | 久久草视频 | 国产精品久久久久久久久久99 | 免费看片国产 | 老牛影视av一区二区在线观看 | 欧美日韩一 | 国产偷录视频叫床高潮对白 | 国产成人高清 | 欧美欧美欧美 | 特级淫片日本高清视频免费 | 国产乱码精品一区二区三区忘忧草 | 亚洲视频在线播放 | 国产伦精品一区二区三区在线 | 久草免费在线 | aaa在线| 国产精品久久久久久久竹霞 | 欧美一区在线看 | 高清xxxx | 国产精品爱久久久久久久 | 久久mm| 国产精品揄拍一区二区久久国内亚洲精 | 天天干天天谢 | 欧美日韩国产一区二区三区 | 日本色综合| 午夜影视 | 亚洲首页 | 成人高清视频在线观看 | 国产99一区二区 | 狠狠狠干 | 美女一区二区三区在线观看 | 91爱爱网| 欧美精品理论片大全 | 91在线入口 | 日韩欧美在线视频观看 | 精品久久久久久国产 | 噜噜噜噜狠狠狠7777视频 | 国产成人精品一区二区视频免费 | 欧美理论片在线 | 国产精品毛片无码 | av一级在线| 亚洲免费精品 | 日韩精品在线观看免费 | 日本 欧美 国产 | 北条麻妃99精品青青久久 | 在线看片网站 | 欧美日韩中文字幕 | 97超碰免费 | 北条麻妃99精品青青久久 | 国产精品欧美一区二区三区 | aaa在线 | 中文在线a在线 | 久久999免费视频 | 久久99精品久久久久久园产越南 | 在线a电影| 91综合视频在线观看 | 久久一区视频 | 簧片毛片| 一区二区国产在线观看 | 欧美日本韩国一区二区 | 亚洲成人精品在线观看 | 精品国产青草久久久久福利 | 精品一区二区三区四区五区 | 日韩欧美在线中文字幕 | 免费在线a| 狠狠操av | 久久国产亚洲 | 欧美成年视频 | 国产中文在线 | 亚洲精品电影网在线观看 | 欧美日韩精品免费观看视频 | 午夜艹| 99re视频 | 成人在线视频播放 | 精品亚洲一区二区三区 | 国产精品久久久久久久 | 成人av免费 |