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

Groovy 語法 類型知識(shí)詳解,你明白了嗎?

開發(fā) 前端
本篇內(nèi)容開始介紹Groovy中的各種類型知識(shí)。將會(huì)分多篇文章詳細(xì)介紹和學(xué)習(xí)Groovy中的有關(guān)于類型的相關(guān)知識(shí)點(diǎn)。內(nèi)容來源于Groovy官方文檔中得到1.6.6. Typing中的相關(guān)知識(shí)點(diǎn)。

1. 介紹

本篇內(nèi)容開始介紹Groovy中的各種類型知識(shí)。將會(huì)分多篇文章詳細(xì)介紹和學(xué)習(xí)Groovy中的有關(guān)于類型的相關(guān)知識(shí)點(diǎn)。

內(nèi)容來源于Groovy官方文檔中得到1.6.6. Typing中的相關(guān)知識(shí)點(diǎn)。

內(nèi)容比較多。可以通過目錄查詢想了解的模塊。

2. 可選類型-Optional typing

可選類型是指即使不在變量上設(shè)置顯式類型,程序也可以工作。作為一種動(dòng)態(tài)語言,Groovy自然實(shí)現(xiàn)了這一特性,例如,當(dāng)聲明一個(gè)變量時(shí):

String aString = 'zinyan.com'   //聲明了一個(gè)變量字符串                    
//我們調(diào)用這個(gè)字符串的大小寫轉(zhuǎn)換方法并輸出
println aString.toUpperCase() //輸出:ZINYAN.COM

在Groovy中,我們可以通過可選類型關(guān)鍵字:def 來代替:

def aString = 'zinyan.com'   //聲明了一個(gè)變量字符串                    

println aString.toUpperCase()

兩種寫法是一樣的。def不只是可以代替String,它可以代替任何的一種數(shù)據(jù)類型。

所以在這里使用顯式類型并不重要。當(dāng)我們將此功能與靜態(tài)類型檢查相結(jié)合時(shí),這尤其有趣,因?yàn)轭愋蜋z查器執(zhí)行類型推斷。

同樣,Groovy不強(qiáng)制在方法中聲明參數(shù)的類型:

String concat(String a, String b) {
a+b
}
println concat('zinyan','.com') //輸出:zinyan.com

可以使用def作為返回類型和參數(shù)類型來重寫,以便利用duck類型,如以下示例所示:

def concat(def a, def b) {                              
a+b
}
println concat('zinyan','.com') //輸出:zinyan.com
println concat(1,2) //輸出:3

我們通過def可選類型,就能實(shí)現(xiàn)動(dòng)態(tài)的參數(shù)處理了。擴(kuò)展了方法的使用范圍。

建議在這里使用def?關(guān)鍵字來描述一個(gè)方法的意圖,該方法應(yīng)該適用于任何類型,但從技術(shù)上講,我們可以使用Object?,結(jié)果是一樣的:在Groovy中,def?嚴(yán)格等同于使用Object。

最終,可以從返回類型和描述符中完全刪除該類型。但如果要從返回類型中刪除它,則需要為該方法添加顯式修飾符,以便編譯器可以在方法聲明和方法調(diào)用之間產(chǎn)生差異,如以下示例所示:

private concat(a,b) {                                  
a+b
}
println concat('zinyan','.com') //輸出:zinyan.com
println concat(1,2) //輸出:3

我們直接將def給省略了。

在公共API的方法參數(shù)或方法返回類型中,省略類型通常被認(rèn)為是一種不好的做法。雖然在局部變量中使用def?并不是一個(gè)真正的問題,因?yàn)樽兞康目梢娦詢H限于方法本身,但在方法參數(shù)上設(shè)置def?時(shí),def將在方法簽名中轉(zhuǎn)換為Object,這使得用戶很難知道哪種類型的參數(shù)是期望的類型。

PS:總結(jié)來說,我們可以將類型定義為def,然后還能將def給省略掉。但是不建議大家在對(duì)外提供的api中省略def。容易造成閱讀困難。

其次,def就是java中的Object對(duì)象。只是中間的各種轉(zhuǎn)換解析等功能Groovy在編譯器中幫我們進(jìn)行了轉(zhuǎn)換。

3. 靜態(tài)類型檢測(cè)-Static type checking

默認(rèn)情況下,Groovy在編譯時(shí)執(zhí)行最小的類型檢查。由于它主要是一種動(dòng)態(tài)語言,所以靜態(tài)編譯器通常無法在編譯時(shí)進(jìn)行的大多數(shù)檢查。通過運(yùn)行時(shí)元編程添加的方法可能會(huì)改變類或?qū)ο蟮倪\(yùn)行時(shí)行為。

通過示例介紹一下:

//創(chuàng)建一個(gè)對(duì)象
class Person {
String firstName
String lastName
}
//初始化該實(shí)例對(duì)象
def p = new Person(firstName: 'Zin', lastName: 'yan')
println p.formattedName

在動(dòng)態(tài)語言中,像上述示例這樣的代碼不拋出任何錯(cuò)誤是很常見的。在Java中,這通常會(huì)在編譯時(shí)失敗。

我們直接執(zhí)行上面的代碼就會(huì)輸出:

Caught: groovy.lang.MissingPropertyException: No such property: formattedName for class: Person
groovy.lang.MissingPropertyException: No such property: formattedName for class: Person
at zinyan.run(zinyan.groovy:8)

錯(cuò)誤提示,我們?nèi)绻胝_\(yùn)行,就需要執(zhí)行依賴運(yùn)行時(shí)元編程。也就是說修改運(yùn)行時(shí)狀態(tài),執(zhí)行動(dòng)態(tài)特性:

Person.metaClass.getFormattedName = { "$delegate.firstName $delegate.lastName" }

完整示例為:

//創(chuàng)建一個(gè)對(duì)象
class Person {
String firstName
String lastName
}
//初始化該實(shí)例對(duì)象
Person.metaClass.getFormattedName = { "$delegate.firstName $delegate.lastName" }
def p = new Person(firstName: 'Zin', lastName: 'yan')
println p.formattedName

這意味著,一般來說,在Groovy中,除了聲明類型之外,我們不能對(duì)對(duì)象的類型做出任何假設(shè),即使我們知道它,也無法在編譯時(shí)確定將調(diào)用什么方法,或者將檢索哪個(gè)屬性。這個(gè)特性用在DSL和測(cè)試腳本編寫中有不少的特性。這里就不展開了。

然而,如果我們的程序不依賴動(dòng)態(tài)特性,并且來自靜態(tài)世界(特別是來自Java思維),那么在編譯時(shí)沒有捕捉到這樣的“錯(cuò)誤”可能會(huì)出現(xiàn)崩潰。正如我們?cè)谇懊娴氖纠锌吹降模幾g器不能確定這是一個(gè)錯(cuò)誤。為了讓編譯器意識(shí)到這一點(diǎn),必須明確指示編譯器我們正在切換到類型檢查模式。這可以通過使用

@groovy.transform.TypeChecked注釋類或方法來完成。

當(dāng)激活類型檢查時(shí),編譯器將新增以下的工作:

類型推斷被激活,這意味著即使對(duì)局部變量使用def,類型檢查器也能夠從賦值中推斷出變量的類型.

方法調(diào)用在編譯時(shí)解析,這意味著如果沒有在類上聲明方法,編譯器將拋出錯(cuò)誤

通常,在靜態(tài)語言中查找的所有編譯時(shí)錯(cuò)誤都會(huì)出現(xiàn):方法未找到、屬性未找到、方法調(diào)用的不兼容類型、數(shù)字精度錯(cuò)誤等…

下面讓我們描述類型檢查器在各種情況下的行為,并解釋在代碼中使用@TypeChecked的限制。

3.1 @TypeChecked注解

在編譯時(shí)激活類型檢查。

我們可以將@groovy.transform.TypeChecked注解添加到類的開頭,

讓編譯器編譯該類時(shí)啟用類型檢測(cè):

@groovy.transform.TypeChecked
class Calculator {
int sum(int x, int y) { x+y }
}

或添加到方法中:

class Calculator {
@groovy.transform.TypeChecked
int sum(int x, int y) { x+y }
}

在第一種情況下,所有方法、屬性、字段、內(nèi)部類… 注釋類的類型將被檢查,而在第二種情況下,只有方法和它包含的潛在閉包或匿名內(nèi)部類將被類型檢查。

我們同時(shí)也可以通過@TypeChecked(TypeCheckingMode.skip)對(duì)其進(jìn)行注釋來指示類型檢查器跳過類型檢測(cè):

import groovy.transform.TypeChecked
import groovy.transform.TypeCheckingMode
//對(duì)GreetingService類的所有方法和類進(jìn)行類型檢測(cè)。
@TypeChecked
class GreetingService {
String greeting() {
doGreet()
}
//對(duì)doGreet方法跳過類型檢測(cè)。
@TypeChecked(TypeCheckingMode.SKIP)
private String doGreet() {
def b = new SentenceBuilder()
b.Hello.my.name.is.Zinyan
b
}
}
def s = new GreetingService()
assert s.greeting() == 'Hello my name is Zinyan'

在前面的示例中,SentenceBuilder?依賴于動(dòng)態(tài)代碼。沒有真正的Hello?方法或?qū)傩裕虼祟愋蜋z查器通常會(huì)發(fā)出異常,編譯將失敗。因?yàn)槭褂蒙善鞯姆椒ū粯?biāo)記為TypeCheckingMode.SKIP,此方法跳過了類型檢查,因此即使類的其余部分進(jìn)行了類型檢查也會(huì)編譯代碼。

以下部分描述Groovy中類型檢查的語義。

3.2 類型檢查分配

類型A?的對(duì)象o?可以賦值給類型T的變量當(dāng)且僅當(dāng):

  • T? 等于A。
  • 或者T? 是以下幾種類型之一:String?, boolean?, Boolean? 或Class。
  • 或者o? 是空的,T不是一個(gè)基本類型。
  • 或者T和A? 是一個(gè)數(shù)組, A? 的組件類型可分配給 T 的組件類型。
  • 或者T? 是一個(gè)數(shù)組,A? 是一個(gè)集合或流(stream ), A?的組件類型可分配給 T的組件類型。
  • 或者T? 是 A 的超類。
  • 或者T?是由 A 實(shí)現(xiàn)的接口。
  • 或者T?或 A 是基本類型,它們的封裝類型是可賦值的。
  • 或者T?extedns groovy.lang.Closure?是一個(gè)閉包,同時(shí)A 是SAM類型(單一抽象方法類型)。
  • 或者T和A?源自java.lang. Number,并遵循下表:

T

A

Examples

Double

Any but BigDecimal or BigInteger

??Double d1 = 4d Double d2 = 4f Double d3 = 4l Double d4 = 4i Double d5 = (short) 4 Double d6 = (byte) 4??

Float

Any type but BigDecimal, BigInteger or Double

??Float f1 = 4f Float f2 = 4l Float f3 = 4i Float f4 = (short) 4 Float f5 = (byte) 4??

Long

Any type but BigDecimal, BigInteger, Double or Float

??Long l1 = 4l Long l2 = 4i Long l3 = (short) 4 Long l4 = (byte) 4??

Integer

Any type but BigDecimal, BigInteger, Double, Float or Long

??Integer i1 = 4i Integer i2 = (short) 4 Integer i3 = (byte) 4??

Short

Any type but BigDecimal, BigInteger, Double, Float, Long or Integer

??Short s1 = (short) 4 Short s2 = (byte) 4??

Byte

Byte

??Byte b1 = (byte) 4??

3.3 List 和Map 的構(gòu)造函數(shù)

除了上面的賦值規(guī)則,如果賦值被認(rèn)為是無效的,在類型檢查模式下,如果滿足以下條件,List或Map A?可以賦值給類型T的變量:

賦值是一個(gè)變量聲明,A?是一個(gè)List,T有一個(gè)構(gòu)造函數(shù),其參數(shù)與List的元素類型匹配。

賦值是一個(gè)變量聲明,A是一個(gè)map,T有一個(gè)無參數(shù)構(gòu)造函數(shù),每個(gè)map鍵都有一個(gè)屬性。

具體示例如下:

@groovy.transform.TupleConstructor
class Person {
String firstName
String lastName
}
Person classic = new Person('Zin','yan')

可以使用“列表構(gòu)造函數(shù)”:

Person list = ['Zin','yan']

創(chuàng)建一個(gè)Person對(duì)象出來,也可以使用Map構(gòu)造函數(shù)創(chuàng)建一個(gè)Person對(duì)象:

Person map = [firstName:'Zin', lastName:'yan']

如果使用Map構(gòu)造函數(shù),則會(huì)對(duì)映射的鍵進(jìn)行額外檢查,以檢查是否定義了同名的屬性。例如,以下代碼將在編譯時(shí)失敗:

@groovy.transform.TupleConstructor
class Person {
String firstName
String lastName
}
Person map = [firstName:'Zin', lastName:'yan', age: 1024]

就會(huì)觸發(fā)以下錯(cuò)誤:

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '{firstName=Zin, lastName=yan, age=1024}' with class 'java.util.LinkedHashMap' to class 'Person' due to: org.codehaus.groovy.runtime.metaclass.MissingPropertyExceptionNoStack: No such property: age for class: Person

3.4 方法解析

在類型檢查模式下,方法在編譯時(shí)解析。解析通過名稱和參數(shù)工作。返回類型與方法選擇無關(guān)。參數(shù)類型與以下規(guī)則中的參數(shù)類型匹配:

類型A?的參數(shù)o?可以用于類型T的參數(shù),當(dāng)且僅當(dāng):

  • T? 等于A。
  • 或者T?是一個(gè)String,A?是一個(gè)GString。
  • 或者o?為空,T不是基礎(chǔ)類型。
  • 或者T?是一個(gè)數(shù)組,A?是一個(gè)數(shù)組,A?的組件類型可以分配給T的組件類型。
  • 或者T是A的超類。
  • 或者T是A實(shí)現(xiàn)的接口。
  • 或者T或A是基本類型,它們的封裝類型是可賦值的。
  • 或T?擴(kuò)展了groovy.lang.Closure?,而A是SAM類型(單一抽象方法類型)。
  • 或者T和A?派生自java.lang.Number,并遵循與數(shù)字賦值相同的規(guī)則。

如果在編譯時(shí)沒有找到具有適當(dāng)名稱和參數(shù)的方法,則拋出錯(cuò)誤。下面的例子說明了與“正常”Groovy的區(qū)別:

class MyService {
void doSomething() {
printLine 'Do something'
}
}

printLine是一個(gè)錯(cuò)誤,但由于我們處于動(dòng)態(tài)模式,錯(cuò)誤在編譯時(shí)不會(huì)被捕獲

上面的例子展示了一個(gè)Groovy能夠編譯的類。但是,如果嘗試創(chuàng)建MyService?的實(shí)例并調(diào)用doSomething?方法,那么它將在運(yùn)行時(shí)失敗,因?yàn)閜rintLine?不存在。當(dāng)然,我們已經(jīng)展示了Groovy如何使它成為一個(gè)完全有效的調(diào)用,例如通過捕獲MethodMissingException?或?qū)崿F(xiàn)一個(gè)自定義元類,但如果你知道你不是在這種情況下,@typecheck會(huì)派上用場(chǎng):

@groovy.transform.TypeChecked
class MyService {
void doSomething() {
printLine 'Do something'
}
}

僅僅添加@typecheck?就會(huì)觸發(fā)編譯時(shí)方法解析。類型檢查器將嘗試在MyService?類上找到一個(gè)接受String的方法printLine,如果找不到。它將編譯失敗,并顯示以下消息:

Cannot find matching method MyService#printLine(java.lang.String)

理解類型檢查器背后的邏輯很重要:它是一種編譯時(shí)檢查,因此根據(jù)定義,類型檢查器不知道我們所做的任何類型的運(yùn)行時(shí)元編程。這意味著如果激活類型檢查,沒有@TypeChecked也完全有效的代碼將不再編譯。如果你想到duck typing,這一點(diǎn)尤其重要:

class Duck {
void quack() {
println 'Quack!'
}
}
class QuackingBird {
void quack() {
println 'Quack!'
}
}
@groovy.transform.TypeChecked
void accept(quacker) {
quacker.quack()
}
accept(new Duck())

比如引入一個(gè)接口,但基本上,通過激活類型檢查,獲得了類型安全,但失去了語言的一些特性。希望Groovy能引入一些特性,比如流類型,以縮小類型檢查和非類型檢查Groovy之間的差距。

4. 小結(jié)

本篇內(nèi)容未完待續(xù)。可以通過下一篇了解完整內(nèi)容。

以上內(nèi)容參考Groovy 官方文檔:http://docs.groovy-lang.org/docs/groovy-4.0.6/html/documentation/#_typing

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

2023-01-04 08:39:34

2022-12-30 08:35:00

2022-12-28 08:03:02

Groovy語法GPath

2022-04-07 11:15:22

PulseEventAPI函數(shù)

2023-12-28 08:43:28

前端算法搜索

2022-10-19 08:19:32

動(dòng)態(tài)基線預(yù)警

2024-01-08 20:05:32

2022-10-10 18:38:56

inert屬性鍵盤

2023-12-08 08:38:15

EventLoopAPI瀏覽器

2022-12-26 08:36:53

Groovy語法控制結(jié)構(gòu)

2024-12-31 00:08:37

C#語言dynamic?

2022-10-08 08:09:13

MGRGreatSQL事務(wù)

2022-03-05 17:56:29

桌面應(yīng)用開發(fā)

2015-09-18 09:17:06

數(shù)據(jù)分析

2023-06-14 08:15:34

算法合并操作Winner

2022-10-24 20:25:40

云原生SpringJava

2023-12-06 08:01:03

CSSPostCSS

2024-03-27 13:33:00

MySQLInnoDB事務(wù)

2024-08-09 13:39:27

2022-05-31 07:32:19

JDK8API工具
點(diǎn)贊
收藏

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

国家队第一季免费高清在线观看| 亚洲国产精一区二区三区性色| 国产麻豆久久| 国产精品乱码人人做人人爱 | 91嫩草丨国产丨精品| 一区二区三区亚洲变态调教大结局 | 一个人www视频在线免费观看| 中文字幕av一区二区三区高| 国产成人精品福利一区二区三区 | 日韩福利小视频| 精品精品精品| 欧美巨大另类极品videosbest | 麻豆一区二区99久久久久| 欧美激情欧美激情| 国产人与禽zoz0性伦| 国偷自产视频一区二区久| 欧美午夜免费电影| 国产女大学生av| 高h视频在线观看| 国产嫩草影院久久久久| 国产91精品入口17c| 中文在线资源天堂| 亚洲影音一区| 欧美国产高跟鞋裸体秀xxxhd| www.99热| 日韩av三区| 欧美www视频| 五月婷婷之婷婷| 亚洲四虎影院| 欧美视频精品一区| 被灌满精子的波多野结衣| 日本中文字幕在线视频| 久久久久久久综合| 九9re精品视频在线观看re6| www.五月婷婷| 国精产品一区一区三区mba视频| 国产成人精品久久二区二区| 五月天婷婷网站| 狠狠综合久久av一区二区老牛| 日韩一区在线视频| x88av在线| 国产精品欧美三级在线观看| 日韩精品在线视频美女| 日本三级日本三级日本三级极| 国模大尺度视频一区二区| 欧美日韩午夜在线| 在线观看av网页| 国产精品久久久久久妇女| 日本韩国一区二区三区视频| 激情网站五月天| 欧美第一视频| 色婷婷亚洲精品| 日韩视频免费在线播放| 高清不卡亚洲| 在线免费不卡电影| 日本熟妇人妻中出| 日韩国产一二三区| 337p亚洲精品色噜噜狠狠| 亚洲免费成人在线视频| 精品国产亚洲一区二区三区| 日韩一级成人av| 波多野结衣三级视频| www.豆豆成人网.com| 亚洲成人xxx| mm131美女视频| 国产欧美一区二区精品久久久| 亚洲色图第一页| 国产又粗又黄又猛| 欧美oldwomenvideos| 麻豆国产va免费精品高清在线| 国语对白在线播放| 日韩午夜一区| 国产不卡一区二区在线播放| 在线免费看91| 懂色一区二区三区免费观看| 久久综合入口| 色的视频在线免费看| 亚洲激情五月婷婷| 日日碰狠狠添天天爽超碰97| 韩国三级一区| 日韩一级黄色片| 毛茸茸多毛bbb毛多视频| 日韩av大片| 九九热这里只有精品6| 日韩欧美国产亚洲| 日本视频一区二区三区| 99视频免费观看蜜桃视频| av女名字大全列表| 国产精品成人一区二区三区夜夜夜| 美女在线免费视频| 中文字幕乱码中文乱码51精品| 欧美日韩一区二区在线视频| 欧美图片自拍偷拍| 国精一区二区| 久久久噜噜噜久久| 中文字幕在线视频第一页| 国产成a人亚洲精| 日韩aⅴ视频一区二区三区| 视频在线观看入口黄最新永久免费国产 | 丁香另类激情小说| 日本精品二区| 欧美高清另类hdvideosexjaⅴ| 黑人巨大精品欧美一区免费视频| 手机在线成人免费视频| 日韩电影不卡一区| 欧美日韩免费视频| 人妻av一区二区| 91偷拍一区二区三区精品| 91精品国产91久久| 国产乱人乱偷精品视频a人人澡 | 女教师淫辱の教室蜜臀av软件| 欧美日韩伊人| 国产精品爽爽爽| 五月天婷婷在线播放| 亚洲日本青草视频在线怡红院| www.com毛片| 一区二区三区亚洲变态调教大结局| 一区二区三区视频在线| 日韩xxxxxxxxx| 国产成人在线视频网址| 亚洲欧美日韩精品综合在线观看| 日本不良网站在线观看| 日韩精品中文字幕在线一区| 熟女俱乐部一区二区视频在线| 欧美高清在线| 国产精品入口尤物| 国产色a在线| 欧美日韩中国免费专区在线看| 最新国产精品自拍| 综合久久十次| 91精品综合久久久久久五月天| 风间由美一区| 91黄色在线观看| 欧美狂猛xxxxx乱大交3| 亚洲综合不卡| 精品欧美日韩在线| 黄频免费在线观看| 亚洲成成品网站| 国产无遮无挡120秒| 国产电影一区二区三区| 玖玖精品在线视频| 蜜桃在线一区| 蜜臀久久99精品久久久久久宅男| 国产农村妇女毛片精品久久| 亚洲欧洲日韩在线| 欧美大片久久久| 亚洲午夜精品一区 二区 三区| 成人av在线亚洲| 日韩精品手机在线| 久久一区亚洲| 欧美日韩日本网| 影音成人av| 日韩中文字幕国产精品| 亚洲一区二区激情| 亚洲三级在线观看| 香蕉视频在线观看黄| 欧美日韩国产在线一区| 国产精品区一区| 爱草tv视频在线观看992| 日韩激情在线视频| 无码人妻精品一区二区三区9厂 | 色在线视频观看| 亚洲福利视频免费观看| 日韩xxxxxxxxx| 久久青草国产手机看片福利盒子| 国产av人人夜夜澡人人爽| 久久精品高清| 666精品在线| 97蜜桃久久| 日韩精品在线观看一区二区| 久久久国产免费| 亚洲视频1区2区| 午夜av免费看| 日韩av中文字幕一区二区 | 午夜激情在线观看| 日韩一区二区在线免费观看| 国产主播在线观看| 久久久久久久国产精品影院| 亚洲免费999| 亚洲一级网站| 日韩精品一区二区三区色偷偷| 欧美成人aaa| 欧美国产乱视频| 久久综合九色综合久| 欧美另类久久久品| 日本熟女一区二区| 国产精品久久久久久久久免费相片 | 国产精品亚洲人在线观看| 日韩精品在线观看av| 国产一区国产二区国产三区| 亚洲自拍在线观看| av高清不卡| 久青草国产97香蕉在线视频| 无码国产精品高潮久久99| 91久久精品国产91性色tv| 国产黄在线免费观看| 91丨九色丨蝌蚪丨老版| 亚洲免费黄色录像| 国产偷自视频区视频一区二区| 伊人av成人| 日韩高清一级| **亚洲第一综合导航网站| a一区二区三区| 久久免费视频这里只有精品| av在线日韩国产精品| 精品成a人在线观看| 国产精品国产三级国产普通话对白 | 欧美日韩综合在线观看| 亚洲人成精品久久久久| 法国伦理少妇愉情| 国产精品一二一区| 在线观看免费视频高清游戏推荐| 999亚洲国产精| 久久天天东北熟女毛茸茸| 波多野结衣的一区二区三区 | 久久在线视频免费观看| 精品一区二区日本| 欧美成人精品午夜一区二区| 国产精品久久久久久久av大片| 黄视频网站在线观看| 欧美另类精品xxxx孕妇| 美女av在线播放| 中文欧美日本在线资源| 香蕉视频网站在线| 欧美大片一区二区| a级片免费观看| 欧美高清一级片在线| 国产情侣小视频| 日本高清成人免费播放| 制服.丝袜.亚洲.中文.综合懂色| 亚洲精品久久7777| 国产精品99久久久久久成人| 国产精品久久久久天堂| 色哟哟精品观看| 91麻豆精品视频| aa一级黄色片| eeuss影院一区二区三区| 国产a√精品区二区三区四区| 国产一区免费电影| 色婷婷一区二区三区av免费看| 三级精品在线观看| 激情综合网俺也去| 日韩av一区二区在线影视| av免费在线播放网站| 久久蜜桃精品| wwwxxx黄色片| 日韩和欧美一区二区三区| 国产第一页视频| 日韩成人免费电影| 91丨九色丨蝌蚪| 黑人巨大精品欧美黑白配亚洲| 国产精品区在线| 激情综合一区二区三区| 麻豆网站免费观看| 丁香婷婷综合五月| 亚洲婷婷在线观看| 91麻豆swag| 一区二区三区久久久久| 国产免费久久精品| 精品无码久久久久成人漫画 | 日本精品免费视频| 欧美特黄一区| 狠狠干 狠狠操| 久久精品电影| 欧美一级xxxx| 国产成人高清在线| 菠萝菠萝蜜网站| 国产欧美一区在线| 国产一区二区视频在线观看免费| 一区二区国产视频| 少妇太紧太爽又黄又硬又爽| 欧洲一区在线观看| 国产黄色一区二区| 日韩精品免费在线| 3d成人动漫在线| 精品中文字幕在线观看| caoporn视频在线| 国产精品久久99久久| 欧美午夜网站| 免费一区二区三区在在线视频| 欧美日一区二区| 8x8ⅹ国产精品一区二区二区| 亚洲福利国产| 日本中文字幕精品—区二区| 国产福利一区二区三区视频 | 国产影视一区| 成人毛片100部免费看| 久久免费黄色| 青娱乐精品在线| 久久色成人在线| 中文字幕av久久爽av| 欧美日韩中国免费专区在线看| 国产精品爽爽久久| 亚洲男人的天堂在线| caopeng在线| 国产成人小视频在线观看| 久久天堂久久| 日韩影院一区| 国产午夜久久| 中国老熟女重囗味hdxx| 久久精品一区二区| 久久免费黄色网址| 欧美日韩国产电影| 神马久久久久| 色与欲影视天天看综合网| 美女色狠狠久久| 黄色一区三区| 欧美aⅴ99久久黑人专区| www.日本xxxx| 91热门视频在线观看| 91aaa在线观看| 777a∨成人精品桃花网| 国产视频精选在线| 91产国在线观看动作片喷水| 精品一区二区三区四区五区| 欧美高清视频一区| 欧美午夜电影在线观看| 五月天丁香花婷婷| 国产欧美va欧美不卡在线| 好吊操这里只有精品| 日韩一区二区免费电影| 2019中文字幕在线视频| 国产v综合ⅴ日韩v欧美大片 | 日韩av大片在线观看| 日韩女优av电影| 成人免费视屏| 成人免费在线视频网址| 清纯唯美亚洲综合一区| 日本黄色三级大片| 91偷拍与自偷拍精品| 日韩欧美大片在线观看| 精品国产精品一区二区夜夜嗨| 成人影院在线看| 91精品在线播放| 亚洲最大av| 中文字幕第三区| 亚洲欧美日韩在线| 99在线观看精品视频| 久久国产天堂福利天堂| 国产精品一区三区在线观看| 自拍偷拍99| 国产美女视频91| 一区二区成人免费视频| 日韩欧美在线网站| 伊人电影在线观看| 97人人澡人人爽| 国产精品地址| 北京富婆泄欲对白| 黑人巨大精品欧美一区二区| 亚洲福利在线观看视频| 欧美激情久久久| 日韩中文av| 黄色av免费在线播放| 中文字幕欧美激情一区| 91亚洲精品国偷拍自产在线观看| 久久久精品在线| 中文一区二区三区四区| 男人日女人逼逼| 久久综合狠狠综合久久激情| 特级毛片www| 亚洲摸下面视频| 亚洲精品伊人| 久操手机在线视频| 91香蕉视频mp4| 最近中文字幕在线视频| 精品国内产的精品视频在线观看| 日韩深夜福利网站| 女人帮男人橹视频播放| 91在线免费视频观看| 少妇又紧又色又爽又刺激视频 | 日本精品在线免费观看| 日韩精品中文字幕一区二区三区| h片精品在线观看| 日韩成人av网站| 国内精品在线播放| 国产一级黄色av| 亚洲欧美在线磁力| 国产亚洲亚洲国产一二区| 亚洲国产精品无码观看久久| 久久久久久毛片| 国产av精国产传媒| 青草成人免费视频| 国产韩日影视精品| 国产一卡二卡三卡四卡| 在线观看日韩av先锋影音电影院| 老司机在线看片网av| 精品免费视频123区| 蓝色福利精品导航| 五月天综合在线| 日韩在线视频网站| 牛牛视频精品一区二区不卡| www午夜视频| 精品欧美一区二区三区| av免费在线一区二区三区| 国产日韩二区| 激情五月激情综合网| 精品人妻无码一区二区性色| 欧美成人高清视频| 欧美亚洲国产精品久久| 无码国产69精品久久久久网站|