色综合老司机第九色激情 _中文字幕日韩av资源站_国产+人+亚洲_久久久精品影院_久久久视频免费观看_欧美激情亚洲自拍_亚洲成av人片在线观看香蕉_热草久综合在线_欧美极品第一页_2020国产精品自拍

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > Java泛型是怎么回事

Java泛型是怎么回事

來源:千鋒教育
發布人:zyh
時間: 2023-06-12 15:30:00 1686555000

  全文大約【6000】字,不說廢話,只講可以讓你學到技術、明白原理的純干貨!本文帶有豐富的案例及配圖視頻,讓你更好地理解和運用文中的技術概念,并可以給你帶來具有足夠啟迪的思考......

Java泛型是怎么回事

  一. 泛型簡介

  作為Java中常用且重要的一個概念,泛型幫我們實現了代碼重用,也保證了類型安全。但關于它的詳細內容,目前很多同學還不清楚,所以接下來小編就帶各位來學習這個重要的知識點。

  1.背景

  為了能夠讓大家更好地理解泛型的作用,在我們開始學習泛型之前,小編先給大家提個開發需求:

  我們現在有一個需求,要求你編寫一個對數組進行排序的方法,該方法能夠對浮點型數組、整型數組、字符串數組或者是其他任何類型的數組進行排序,你該如何實現?

  有的小伙伴會說,這很簡單啊,我可以利用方法重載,針對每種類型的數組分別編寫一個排序方法,需要為幾種類型的數組排序,我就定義幾個排序方法。如果你是這么實現的,小編只能哈哈哈了,這種做法明顯不好,代碼可重用性太差。

  又有的小伙伴說了,可以定義一個方法,里面設置一個Object[]類型的參數,這樣無論是哪種類型都可以處理了。這樣定義方法,比上面那個同學的想法要稍好一點,但此時我們需要在Object類型和整型、String類型或其他類型之間進行強制類型轉換。所以這樣做就無法保證集合中元素的類型安全,稍一不慎就可能會導致ClassCastException類型轉換異常。

  so,這也不行,那也不行,到底該怎么辦?這不,為了解決這些問題,所以Java中就產生了泛型這個技術。

  2.概念

  泛型(generics)這個技術是在JDK 5中引入的新特性,它的本質其實是類型參數化,利用泛型可以實現一套代碼對多種數據類型的動態處理,保證了更好的代碼重用性。并且泛型還提供了編譯時對類型安全進行檢測的機制,該機制允許我們在編譯時就能夠檢測出非法的類型,提高了代碼的安全性。

  這種特性,使得泛型成了一種“代碼模板”,讓我們利用一套代碼就能實現對各種類型的套用。也就是說,我們只需要編寫一次代碼,就可以實現萬能匹配,這也是”泛型“這個概念的含義,你可以將其理解為”廣泛的類型“、”非特定的類型“。咱們上面的那個需求,利用泛型就能輕松實現,還不需要進行類型的強制轉換,并且也保證了數據的類型安全。

  3.作用

  所以根據上面泛型的概念,我們可以提取出泛型的核心作用:

  ● 泛型可以在編譯時對類型進行安全檢測,使得所有的強制轉換都是自動隱式實現的,保證了類型的安全性;

  ● 泛型作為”代碼模板“,實現了一套代碼對各種類型的套用,提高了代碼的可重用性。

  4.使用場景

  基于泛型的這些特性和作用,我們可以把泛型用在很多地方,小編在這里給大家做了一個總結,通常情況下,泛型可以用在如下場景中:

  ● 泛型集合:在各種集合中使用泛型,保證集合中元素的類型安全;

  ● 泛型方法:在各種方法中使用泛型,保證方法中參數的類型安全;

  ● 泛型類:在類的定義時使用泛型,為某些變量和方法定義通用的類型;

  ● 泛型接口:在接口定義時使用泛型,為某些常量和方法定義通用的類型;

  ● 泛型加反射:泛型也可以結合反射技術,實現在運行時獲取傳入的實際參數等功能。

  但是我們要注意,無論我們在哪個地方使用泛型,泛型都不能是基本類型,關于這一點,我會在講解泛型擦除時再細說。

  總之,泛型的應用場景有很多,以上只是小編給大家總結的幾個重點使用場景,接下來小編就這幾個場景分別給大家進行講解。

  二. 泛型集合

  1.簡介

  泛型最常見的一個用途,就是在集合中對數據元素的類型進行限定。集合作為一個容器,主要是用來容納保存數據元素的,但集合的設計者并不知道我們會用集合來保存什么類型的對象,所以他們就把集合設計成能保存任何類型的對象。這就要求集合具有很好的通用性,內部可以裝載各種類型的數據元素。集合之所以可以實現這一功能,主要是集合的源碼中已經結合泛型做了相關的設計,我們來看看Collection的源碼,如下圖所示:

1685949457919.image

  而Collection的子類List中也增加了對泛型的支持,如下圖所示:

1685949466702.image

  上面的源碼中,集合中的就是泛型,至于泛型的名字為什么叫做”E“,后面小編再跟大家細說。但不管如何,從這些源碼中我們就可以看出,Java的集合本身就支持泛型了。我們先不管集合底層是如何設計的,咱們先從基本用法開始學起。

  2. 語法

  在集合中使用泛型其實比較簡單,我們以List集合為例,其基本語法如下: 

//可以省略后面ArrayList里的String,編譯器可以自動根據前面<>里的類型,推斷出后面<>里使用的泛型類型
List<String> list = new ArrayList<>();

  上面的語法,其含義是說我們定義了一個ArrayList集合,但該集合不能隨便添加數據元素,只能添加String類型的元素。也就是說,在上面的語法中,我們通過泛型,限定了ArrayList集合的元素類型。當我們定義List集合時,如果已經限定了泛型類型,但后面添加元素時你非得違背這個類型,Java就會在編譯階段報錯,如下圖所示:

1685949491302.image


  我們在定義集合時,可以省略后面ArrayList里的String,編譯器可以自動根據前面<>里的類型,推斷出后面<>里使用的泛型類型。另外Set和Map集合的用法,與List集合類似,我們可以通過下面這個案例來體會一下集合泛型的魅力。

  3. 代碼案例

  在本案例中,我們可以給List、Set、Map等集合設置泛型,從而限定集合中數據元素的類型。 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
* @author 一一哥Sun
*/
public class Demo01 {
public static void main(String[] args) {
//定義集合泛型
//此時的集合只能接受String類型元素,后面ArrayList<>中的<>,里面的String可寫可不寫
List<String> list = new ArrayList<>();
//如果類型不一致,在編譯階段就會檢測出有錯誤,保證了數據的安全性
//list.add(100);
list.add("Hello");
String strValue = list.get(0);
System.out.println("list value="+strValue);

Set<Integer> set=new HashSet<>();
//set.add("hello");
set.add(200);
Iterator<Integer> iterator = set.iterator();
while(iterator.hasNext()) {
Integer nextValue = iterator.next();
System.out.println("set value="+nextValue);
}

//限定Map集合的key是String類型,value是Long類型
Map<String,Long> map=new HashMap<>();
//map.put("number", "10000");
map.put("number", 10000L);
Long value = map.get("number");
System.out.println("map value="+value);
}
}

  在這個案例中,我們在集合中通過泛型限定了集合元素的數據類型。如果元素的類型與要求的不一致,在編譯階段就會檢測出有錯誤,不需要進入到運行階段才能發現類型不一致。而且我們在獲取集合中的元素時,也不需要進行強制類型轉換,程序會自動進行隱式轉換,這就保證了數據的安全性,也提高了代碼的執行效率。

  另外我們所使用的泛型參數,也被稱為類型變量,是用于指定泛型類型名稱的標識符。我們可以根據需要,在集合、類、接口、方法等地方定義一個或多個泛型參數,這些泛型化的類型參數也被稱為參數化的類或參數化的類型。

  三. 泛型接口

  我們除了可以在集合中使用泛型,還可以在定義接口時使用泛型,這也是泛型的常用形式之一。

  1.語法

  在定義接口時使用泛型的基本語法格式如下:  

//在接口名稱后面緊跟泛型<>
public interface InterfaceName<T> {
// 接口的方法定義
}

//可以同時定義多個泛型,多個泛型用","逗號分割
public interface InterfaceName2<M,N> {
// 接口的方法定義
}

  大家注意,這里泛型的名稱T/M/N,其實是我們隨意寫的,我們并不一定非要使用T,也可以使用M、N、E等任意名稱。而之所以使用T,只是采用了Type類型這個單詞的首字母而已。雖然如此,但我們在實際開發時,為了盡量做到見名知意,請大家還是要盡量采用有意義的名稱,通常會使用如下幾個常用字母:

  ● E - Element(表示集合元素,常在集合中使用);

  ● T - Type(表示Java類,常用在類和接口中);

  ● K - Key(表示鍵);

  ● V - Value(表示值);

  ● N - Number(表示數值類型);

  ● ? - 表示不確定的Java類型。

  另外,這里的T只是一種類型參數,你可以把它理解成是一個”表面的占位符“。在真正賦值時,它可以用任何實際的類型來替代,如Integer、String、自定義類型等。并且我們在定義接口時,可以根據實際需要,同時定義多個泛型,多個泛型之間用","逗號分割。而在實際使用時,我們需要在該接口名的后面加上一對尖括號,用來傳入實際的類型。

  2. 代碼案例

  2.1 定義泛型接口

  接下來我們再通過一個案例來學習一下接口泛型如何使用,這里我們定義一個泛型接口ICompute,內部定義了一個用于計算的方法,如下所示: 

/**
* 定義一個用于計算的接口
*/
public interface ICompute<M,N> {

//定義一個加法計算的方法
M add(M m,N n);
}

  2.2 實現泛型接口

  接下來我們把這個接口進行實現,代碼如下: 

public class Demo02 {
public static void main(String[] args) {
//這里壹哥直接利用匿名內部類的寫法進行實現,大家也可以編寫一個類實現ICompute接口
//我這里傳入了兩個Integer類型的具體參數,分別取代M和N
ICompute<Integer, Integer> iCompute = new ICompute<Integer, Integer>() {
@Override
public Integer add(Integer m, Integer n) {
return m+n;
}
};

//調用上面實現的方法
Integer result = iCompute.add(100, 200);
System.out.println("result="+result);
}
}

  這里小編直接利用匿名內部類的寫法進行實現,大家也可以編寫一個類實現ICompute接口。我這里傳入了兩個Integer類型的具體參數,分別取代M和N,當然我們也可以根據需要,在實現時傳入Float/Double等其他類型。

  四. 泛型類

  其實Java的類和接口在很多地方都很類似,所以我們在定義接口時可以使用泛型,也可以在定義類時使用泛型,泛型類常用于類中的屬性類型不確定的情況下,這也是泛型的常用形式之一。

  1.語法

  其實泛型類的聲明和普通類的聲明類似,只是在類名后面多添加了一個關于泛型的聲明。并且泛型類的類型參數部分,可以包含一個或多個類型參數,多個參數間用逗號隔開。一般我們在定義泛型類時,需要在類名后添加類型參數,語法格式與泛型接口一致,如下所示:  

public class ClassName<T> {
// 類的成員變量和方法定義
}

  泛型類的要求和泛型接口完全一樣,這里小編就不再贅述了。

  2. 代碼案例

  2.1 定義泛型類

  接下來小編定義一個泛型類Pair,它包含兩個類型相同的成員變量: 

public class Pair<T> {

//我們可以直接把泛型當成一個java的“類型”來用,Java類怎么用,泛型就可以怎么用
//直接利用泛型來定義成員變量
private T first;
private T second;

//構造方法中使用泛型
public Pair(T first, T second) {
this.first = first;
this.second = second;
}

//方法中使用泛型
public T getFirst() {
return first;
}

public T getSecond() {
return second;
}
}

  在上述代碼中,我們定義了一個泛型類Pair,它有兩個類型相同的成員變量first和second,以及一個構造函數和兩個訪問成員變量的方法。在定義Pair類時,我們使用了類型參數T來代表類型,而在實例化該泛型類時,需要指明泛型類中的類型參數,并賦予泛型類屬性相應類型的值,比如指定T是String/Integer/Student/Person等任意類型。

  2.2 使用泛型類

  接下來是使用Pair類的具體代碼: 

public class Demo03 {
public static void main(String[] args) {
//調用泛型類
Pair<String> pair = new Pair<>("Hello", "World");
// 輸出 "Hello"
System.out.println("first="+pair.getFirst());
// 輸出 "World"
System.out.println("last="+pair.getSecond());
}
}

   在上述代碼中,我們使用了Pair類,并將類型參數指定為String類型。然后我們創建了一個Pair對象,并通過getFirst和getSecond方法訪問了成員變量。

  五. 繼承泛型類和實現泛型接口

  在Java中,泛型不僅可以用于類、方法的定義,還可以用于類和接口的繼承與實現。接下來小編就給大家詳細介紹一下,該如何繼承泛型類和實現泛型接口。

  1.簡介

  大家要注意,一個被定義為泛型的類和接口,也可以被子類繼承和實現。例如下面的示例代碼,就給大家演示了如何繼承一個泛型類。 

public class FatherClass<T1>{}

public class SonClass<T1,T2,T3> extents FatherClass<T1>{}

  但是如果我們想要SonClass類在繼承FatherClass類時,能夠保留父類的泛型類型,則需要在繼承時就指定。否則直接使用extends FatherClass語句進行繼承操作時,T1、T2 和 T3都會自動變為Object類型,所以一般情況下都是將父類的泛型類型保留。

  接下來小編會分別給大家介紹一下如何繼承泛型類和實現泛型接口。

  2. 繼承泛型類

  2.1 定義泛型父類

  在Java中,我們可以通過繼承一個泛型類來實現泛型的重用。子類可以繼承父類中定義的泛型類型,并根據自己的需要,增加、修改泛型類型的參數,從而實現泛型類的個性化定制。下面是一個泛型類的示例:  

/**
* 泛型類
*/
public class GenericClass<T1> {

private T1 data;

public GenericClass(T1 data) {
this.data = data;
}

public T1 getData() {
return data;
}
}

  2.2 泛型子類繼承父類

  我們可以通過繼承GenericClass類,來創建一個新的泛型類SonGenericClass,并增加新的泛型類型: 

/**
* 泛型類
*/
public class SonGenericClass<T1,T2> extends GenericClass<T1>{

private T2 otherData;

public SonGenericClass(T1 data, T2 otherData) {
super(data);
this.otherData = otherData;
}

public T2 getOtherData() {
return otherData;
}
}

  在上面的示例中,SonGenericClass類繼承了GenericClass類,并增加了一個新的泛型類型T2。在構造方法中,調用父類的構造方法,并傳入T1類型的數據,然后再將T2類型的數據賦值給類的成員變量otherData。通過這種方式,我們可以創建一個具有更多泛型參數的類,并且保留了原始泛型類的特性。我們來看看最終的測試結果: 

public class Demo08 {

public static void main(String[] args) {
SonGenericClass<Integer,String> son=new SonGenericClass<>(100, "hello");
//子類從父類中繼承來的泛型
Integer data = son.getData();
String otherData = son.getOtherData();
System.out.println("t1---data="+data+",t2---data="+otherData);
}
}

  這樣,子類通過繼承父類,也自動獲得了父類中的泛型。

  3. 實現泛型接口

  3.1 定義泛型接口

  類似于繼承泛型類,我們也可以通過實現泛型接口,來定義具有多個泛型參數的接口。實現泛型接口的過程與實現普通接口的過程相同,我們只需要在接口名后面添加這樣的泛型參數聲明即可。下面是一個泛型接口的示例: 

/**
*
* 定義泛型接口
*/
public interface GenericInterface<T1> {

public void doSomething(T1 data);
}

  3.2 兩種實現方式

  我們在實現泛型接口時,可以采用兩種實現方式:

  指定具體類型:就是在實現接口時,明確指定泛型參數的具體類型;

  保留泛型參數:在實現接口時,不明確指定泛型參數的具體類型,而是保留泛型參數。

  如果是通過指定具體類型的方式進行實現,一般形式如下: 

public class StringPair implements Pair<String> {
.....
}

  在這種方式中,我們定義了一個Pair接口,然后讓子類StringPair進行實現,但在實現時就明確指定了具體的泛型參數為String。這樣,我們在使用StringPair對象時,就明確知道了類內部的數據類型。

  如果是通過保留泛型參數的方式進行實現,一般形式如下:  

public class NumberPair<T extends 父類型> implements Pair<T> {
......
}

  在這種方式中,我們定義了一個泛型接口Pair,然后定義一個實現字類NumberPair,可以在實現時保留泛型參數。

  3.3 實現泛型接口

  接下來,我們再編寫一個SubGenericInterface類,并通過保留泛型參數的方式,來實現GenericInterface接口,并增加一個新的泛型類型T2,代碼如下: 

public class SubGenericClass<T1,T2> implements GenericInterface<T1>{

private T2 otherData;

@Override
public void doSomething(T1 data) {
System.out.println("t1="+data);
}

public SubGenericClass(T2 otherData) {
this.otherData = otherData;
}

public T2 getOtherData() {
return otherData;
}

}

    這樣泛型子類就實現了泛型父類,并在子類中增加了一個新的泛型,最終的結果如下所示: 

public class Demo09 {

public static void main(String[] args) {
SubGenericClass<Integer,String> sub=new SubGenericClass<>("hello");
sub.doSomething(100);
String otherData = sub.getOtherData();
System.out.println("t2---data="+otherData);
}
}

  其實,實現泛型接口和繼承泛型類都很簡單,我們只需要在類定義中使用相同的泛型類型參數,然后實現接口的方法或覆蓋超類的方法即可。

  以上就是關于泛型的概念、作用、泛型接口、泛型類等相關的內容,其實泛型的內容還有很多,比如泛型方法、泛型擦除和泛型中的通配符等。但受限于篇幅,小編會在下一篇文章中繼續給大家講解這些內容,敬請繼續關注哦。

  五. 結語

  至此,在本文中小編就把泛型的概念、作用、泛型接口和泛型類給大家介紹完了,本文重點內容如下:

  ● 泛型是一種類型參數,可以編寫模板代碼來適應任意類型;

  ● 泛型在使用時不必對類型進行強制轉換,它可以通過編譯器在編譯階段對類型進行檢查;

  ● 使用泛型時可以把泛型參數替換成想要的class類型,例如ArrayList,ArrayList等;

  ● 編譯器可以根據前面的泛型,在后面自動推斷出類型,例如List list = new ArrayList<>();

  ● 如果我們在使用時不指定泛型參數類型時,編譯器會給出警告,且只能將視為Object類型;

  ● 我們可以在接口和類中定義泛型類型,實現此接口的類必須傳入正確的泛型類型;

  ● 我們可以同時定義多個泛型,例如Map;

  ● 可以繼承泛型類和實現泛型接口。

tags: Java泛型
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
色综合老司机第九色激情 _中文字幕日韩av资源站_国产+人+亚洲_久久久精品影院_久久久视频免费观看_欧美激情亚洲自拍_亚洲成av人片在线观看香蕉_热草久综合在线_欧美极品第一页_2020国产精品自拍
久久综合综合久久综合| 日韩欧美一区二区视频| 亚洲18影院在线观看| 亚洲宅男天堂在线观看无病毒| 亚洲欧洲另类国产综合| 一区二区三区欧美激情| 亚洲成av人影院| 免费黄网站欧美| 成人深夜视频在线观看| 色综合久久久久网| 国产一区二区三区免费观看| 激情都市一区二区| 99久久99久久免费精品蜜臀| 欧美日韩一卡二卡三卡| 久久久久高清精品| 亚洲成人动漫av| 国产寡妇亲子伦一区二区| 欧美午夜精品久久久久久超碰| 精品国产伦一区二区三区观看体验 | 97超碰欧美中文字幕| 91丝袜美腿高跟国产极品老师 | 色女孩综合影院| 精品国产露脸精彩对白| 亚洲精品ww久久久久久p站| 国产精品一区二区在线播放| 777午夜精品免费视频| 一区二区三区久久| 色婷婷综合久久久中文字幕| 国产精品私人自拍| 国产婷婷精品av在线| 欧美美女bb生活片| 成人午夜av在线| 美女久久久精品| 99精品欧美一区| 欧美激情艳妇裸体舞| 国产成人丝袜美腿| 欧美最猛性xxxxx直播| 91玉足脚交白嫩脚丫在线播放| 在线播放视频一区| 亚洲男人天堂av网| 国精产品一区一区三区mba桃花| 国产成人在线免费| 欧美日本一区二区三区四区| 亚洲欧洲日产国码二区| 中文字幕巨乱亚洲| 美腿丝袜亚洲一区| 一区二区三区美女| 国产精品国产三级国产aⅴ入口 | 国产剧情一区在线| 欧美日韩国产精品自在自线| 一区二区三区欧美在线观看| 丰满亚洲少妇av| 91精品国产欧美日韩| 亚洲乱码中文字幕| 精品视频999| 欧美激情资源网| 亚洲视频你懂的| 欧美一级片免费看| 青青草精品视频| 亚洲高清免费一级二级三级| 69堂成人精品免费视频| 久久日韩精品一区二区五区| 亚洲精品一区二区三区精华液| 在线免费视频一区二区| 蜜桃av一区二区三区| 日本一区二区三区久久久久久久久不 | 久久综合九色综合97婷婷女人 | 亚洲国产精品成人综合| 成人午夜视频福利| 国产二区国产一区在线观看| 三级欧美在线一区| 中文在线一区二区| 精品久久久久久久一区二区蜜臀| 91亚洲精华国产精华精华液| 麻豆精品一二三| 日本中文一区二区三区| 日韩主播视频在线| 性做久久久久久免费观看欧美| 夜夜精品视频一区二区| 国产精品护士白丝一区av| 国产精品久久毛片av大全日韩| 国产精品久久久久久久久免费丝袜 | 亚洲成人动漫一区| 日韩激情中文字幕| 国产乱码字幕精品高清av| 99久久精品国产导航| 51精品视频一区二区三区| 国产亚洲欧美日韩俺去了| 国产精品不卡在线| 日本va欧美va瓶| 成人爱爱电影网址| 欧美理论在线播放| 日本一区二区成人| 1024亚洲合集| 日产国产欧美视频一区精品| 激情丁香综合五月| 欧美在线播放高清精品| 91理论电影在线观看| 精品理论电影在线| 中文字幕不卡在线播放| 一区二区三区色| 国产米奇在线777精品观看| 欧美主播一区二区三区| 国产精品色哟哟| 久久精品国产网站| 精品视频全国免费看| 国产成人亚洲综合色影视| 一区二区三区色| 狠狠色丁香婷婷综合久久片| 在线播放一区二区三区| 亚欧色一区w666天堂| 欧美视频一区二区三区四区 | 日韩欧美一级精品久久| 一级女性全黄久久生活片免费| 91影院在线免费观看| 亚洲日本免费电影| 一本一道久久a久久精品| 亚洲欧美另类久久久精品2019| 波多野结衣中文字幕一区 | 欧美日韩卡一卡二| 天堂久久一区二区三区| 欧美电影免费观看完整版 | 国产成人精品影视| 国产日产欧产精品推荐色| 国产精品综合一区二区| 亚洲视频一区二区免费在线观看 | 国产成人aaa| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 国产日韩欧美a| av爱爱亚洲一区| 亚洲午夜私人影院| 国产日韩三级在线| 在线观看91视频| 国产福利精品一区二区| 亚洲一区二区三区不卡国产欧美| 日韩午夜激情电影| 91理论电影在线观看| 韩国女主播成人在线| 亚洲福利一二三区| 中文字幕日本不卡| 国产亚洲综合性久久久影院| 欧美电影在线免费观看| 日本二三区不卡| 国产成人精品午夜视频免费| 日日夜夜免费精品| 亚洲午夜精品在线| 亚洲精品中文在线| 综合久久国产九一剧情麻豆| 国产午夜精品一区二区三区嫩草 | 麻豆成人免费电影| 亚洲成人午夜电影| 亚洲欧美日韩国产综合在线| 久久理论电影网| 久久精品综合网| 欧美精品一区二区久久婷婷| 日韩视频中午一区| 日韩欧美中文字幕精品| 日韩精品一区二区三区在线观看| 欧美一级xxx| 精品国产乱码久久久久久老虎| 日韩精品一区国产麻豆| 欧美va天堂va视频va在线| 久久欧美一区二区| 国产精品伦一区| 亚洲在线免费播放| 日韩福利视频导航| 久久99国产精品久久| 粉嫩av亚洲一区二区图片| 色狠狠桃花综合| 日韩欧美中文一区| 亚洲视频一区二区在线观看| 午夜av电影一区| 国产成人夜色高潮福利影视| 日本韩国欧美国产| 日韩欧美国产综合在线一区二区三区| 欧美一区中文字幕| 最新国产成人在线观看| 美女在线视频一区| 欧美自拍偷拍午夜视频| 国产三级精品视频| 蜜臀99久久精品久久久久久软件| 成人av网站在线观看| 日韩精品自拍偷拍| 亚洲色图一区二区三区| 国产精品一区二区x88av| 91精品综合久久久久久| 尤物在线观看一区| 99riav久久精品riav| 国产精品久久久久毛片软件| 国产一区二区三区av电影| 精品久久国产老人久久综合| 蜜桃视频在线观看一区| 欧美日韩精品福利| 图片区小说区区亚洲影院| 91国偷自产一区二区开放时间| 综合亚洲深深色噜噜狠狠网站| 不卡一区二区三区四区| 欧美videos中文字幕| 日韩高清中文字幕一区| 精品99一区二区三区|