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

Groovy 2.0新特性之:靜態類型檢查

開發 后端
Groovy 2.0 剛剛發布,其中一項最大的改進就是支持靜態類型檢查。今天我們將對這個新特性進行全方位的介紹。

Groovy 2.0 剛剛發布,其中一項最大的改進就是支持靜態類型檢查。今天我們將對這個新特性進行全方位的介紹。

靜態類型檢查

Groovy 天生就是一個動態編程語言,它經常被當作是 Java 腳本語言,或者是“更好的 Java”。很多 Java 開發者經常將 Groovy 嵌入到 Java 程序中做為擴展語言來使用,更簡單的描述業務規則,將來為不同的客戶定制應用等等。對這樣一個面向 Java 的用例,開發者不需要語言提供的所有動態特性,他們經常希望 Groovy 也提供一個類似 javac 的編譯器,例如在發生一些錯誤的變量和方法名錯誤或者錯誤的類型賦值時就可以在編譯時就知道錯誤,而不是運行時才報錯。這就是為什么 Groovy 2.0 提供了靜態類型檢查功能的原因。

發現明顯的錯別字

靜態類型檢測器使用了 Groovy 已有強大的 AST (抽象語法樹) 轉換機制,如果你對這個機制不熟悉,你就把它當作一個可選的通過注解進行觸發的編譯器插件。這是一個可選的特性,可用可不用。要觸發靜態類型檢查,只需要在方法上使用@TypeChecked 注解即可。讓我們來看一個簡單的例子:

 

  1. import groovy.transform.TypeChecked  
  2.  
  3. void someMethod() {}  
  4.  
  5. @TypeChecked 
  6. void test() {  
  7.     // compilation error:  
  8.     // cannot find matching method sommeeMethod()  
  9.     sommeeMethod()  
  10.  
  11.     def name = "oschina" 
  12.  
  13.     // compilation error:  
  14.     // the variable naaammme is undeclared  
  15.     println naaammme  

 

我們使用了 @TypeChecked 對 test() 方法進行注解,這讓 Groovy 編譯器在編譯期間運行靜態類型檢查來檢查指定的方法。當我們試圖用明顯錯誤的方法來調用 someMethod() 時,編譯器將會拋出兩個編譯錯誤信息表明方法和變量為定義

檢查賦值和返回值

靜態類型檢查還能驗證返回值和變量賦值是否匹配:

 

  1. import groovy.transform.TypeChecked  
  2.  
  3. @TypeChecked 
  4. Date test() {  
  5.     // compilation error:  
  6.     // cannot assign value of Date   
  7.     // to variable of type int  
  8.     int object = new Date()  
  9.  
  10.     String[] letters = ['o''s''c']  
  11.     // compilation error:  
  12.     // cannot assign value of type String   
  13.     // to variable of type Date  
  14.     Date aDateVariable = letters[0]  
  15.  
  16.     // compilation error:  
  17.     // cannot return value of type String   
  18.     // on method returning type Date  
  19.     return "today" 

 

在這個例子中,編譯器將告訴你不能將 Date 值賦值個 int 變量,你也不能返回一個 String,因為方法已經要求是返回 Date 類型數據。代碼中間的編譯錯誤信息也很有意思,不僅是說明了錯誤的賦值,還給出了類型推斷,因為類型檢測器知道 letters[0] 的類型是 String。

類型推斷 type inference

因為提到了類型推斷,讓我們來看看其他的一些情況,我們說過類型檢測器會檢查返回類型和值:

 

  1. import groovy.transform.TypeChecked  
  2.  
  3. @TypeChecked 
  4. int method() {  
  5.     if (true) {  
  6.         // compilation error:  
  7.         // cannot return value of type String  
  8.         // on method returning type int  
  9.         'String' 
  10.     } else {  
  11.         42 
  12.     }  

 

指定了方法必須返回 int 類型值后,類型檢查器將會檢查各種條件判斷分支的結構,包括 if/elese、try/catch、switch/case 等。在上面的例子中,如果 if 分支中返回字符串而不是 int,編譯器就會報錯。

自動類型轉換

靜態類型檢查器并不會對 Groovy 支持的自動類型轉換報告錯誤,例如對于返回 String, boolean 或 Class 的方法,Groovy 會自動將返回值轉成相應的類型:

 

  1. import groovy.transform.TypeChecked  
  2.  
  3. @TypeChecked 
  4. boolean booleanMethod() {  
  5.     "non empty strings are evaluated to true" 
  6. }  
  7.  
  8. assert booleanMethod() == true 
  9.  
  10. @TypeChecked 
  11. String stringMethod() {  
  12.     // StringBuilder converted to String calling toString()  
  13.     new StringBuilder() << "non empty string" 
  14. }  
  15.  
  16. assert stringMethod() instanceof String  
  17.  
  18. @TypeChecked 
  19. Class classMethod() {  
  20.     // the java.util.List class will be returned  
  21.     "java.util.List" 
  22. }  
  23.  
  24. assert classMethod() == List 

 

而且靜態類型檢查器在類型推斷方面也足夠聰明:

 

  1. import groovy.transform.TypeChecked  
  2.  
  3. @TypeChecked 
  4. void method() {  
  5.     def name = " oschina.net " 
  6.  
  7.     // String type inferred (even inside GString)  
  8.     println "NAME = ${name.toUpperCase()}" 
  9.  
  10.     // Groovy GDK method support  
  11.     // (GDK operator overloading too)  
  12.     println name.trim()  
  13.  
  14.     int[] numbers = [123]  
  15.     // Element n is an int  
  16.     for (int n in numbers) {  
  17.         println   
  18.     }  

 

雖然變量 name 使用 def 進行定義,但類型檢查器知道它的類型是 String. 因此當調用 ${name.toUpperCase()} 時,編譯器知道在調用 String 的 toUpperCase() 方法和下面的 trim() 方法。當對 int 數組進行迭代時,它也能理解數組的元素類型是 int.

混合動態特性和靜態類型的方法

你必須牢記于心是:靜態類型檢查限制了你可以在 Groovy 使用的方法。大部分運行時動態特性是不被允許的,因為他們無法在編譯時進行類型檢查。例如不允許在運行時通過類型的元數據類(metaclasses)來添加新方法。但當你需要使用一些例如 Groovy 的 builders 這樣的動態特性時,如果你愿意,你還是可以選擇靜態類型檢查。

@TypeChecked 注解可放在方法級別或者是類級別使用。如果你想對整個類進行類型檢查,直接在類級別上放置這個注解即可,否則就在某些方法上進行注解。你也可以使用 @TypeChecked(TypeCheckingMode.SKIP) 或者是 @TypeChecked(SKIP) 來指定整個類進行類型檢查除了某個方法。使用 @TypeChecked(SKIP) 必須靜態引入對應的枚舉類型。下面代碼可以用來演示這個特性,其中 greeting() 方法是需要檢查的,而 generateMarkup() 方法則不用:

 

  1. import groovy.transform.TypeChecked  
  2. import groovy.xml.MarkupBuilder  
  3.  
  4. // this method and its code are type checked  
  5. @TypeChecked 
  6. String greeting(String name) {  
  7.     generateMarkup(name.toUpperCase())  
  8. }  
  9.  
  10. // this method isn't type checked  
  11. // and you can use dynamic features like the markup builder  
  12. String generateMarkup(String name) {  
  13.     def sw =new StringWriter()  
  14.     new MarkupBuilder(sw).html {  
  15.         body {  
  16.             div name  
  17.         }  
  18.     }  
  19.     sw.toString()  
  20. }  
  21.  
  22. assert greeting("Cédric").contains("<div>CÉDRIC</div>"

 

類型推斷和 instanceof 檢查

目前的 Java 并不支持一般的類型推斷,導致今天很多地方的代碼往往是相當冗長,而且樣板結構混亂。這掩蓋了代碼的實際用途,而且如果沒有強大的 IDE 支持的話代碼會很難寫。于是就有了 instanceof 檢查:你經常會在 if 條件判斷語句中使用 instanceof 判斷。而在 if 語句結束后,你還是必須手工對變量進行強行類型轉換。而有了 Groovy 全新的類型檢查模式,你可以完全避免這種情況出現:

 

  1. import groovy.transform.TypeChecked  
  2. import groovy.xml.MarkupBuilder  
  3.  
  4. @TypeChecked 
  5. String test(Object val) {  
  6.     if (val instanceof String) {  
  7.         // unlike Java:   
  8.         // return ((String)val).toUpperCase()  
  9.         val.toUpperCase()  
  10.     } else if (val instanceof Number) {  
  11.         // unlike Java:   
  12.         // return ((Number)val).intValue().multiply(2)  
  13.         val.intValue() * 2 
  14.     }  
  15. }  
  16.  
  17. assert test('abc') == 'ABC' 
  18. assert test(123) == '246' 

 

上述例子中,靜態類型檢查器知道 val 參數在 if 塊中是 String 類型,而在 else if 塊中是 Number 類型,無需再做任何手工類型轉換。

最低上限 Lowest Upper Bound

靜態類型檢測器比一般理解的對象類型診斷要更深入一些,請看如下代碼:

 

  1. import groovy.transform.TypeChecked  
  2.  
  3. // inferred return type:  
  4. // a list of numbers which are comparable and serializable  
  5. @TypeChecked test() {  
  6.     // an integer and a BigDecimal  
  7.     return [12343.14]  

 

在這個例子中,我們返回了數值列表,包括 Integer 和 BigDecimal. 但靜態類型檢查器計算了一個最低的上限,實際上是一組可序列化(Serializable)和可比較(Comparable)的數值。而 Java 是不可能表示這種類型的,但如果我們使用一些交集運算,那看起來就應該是 List<Number & Serializable & Comparable>.

不同對象類型的變量 Flow typing

雖然這可能不是一個好的方法,但有時候開發者會使用一些無類型的變量來存儲不同類型的值,例如:

 

  1. import groovy.transform.TypeChecked  
  2.  
  3. @TypeChecked test() {  
  4.     def var = 123             // inferred type is int  
  5.     var = "123"               // assign var with a String  
  6.  
  7.     println var.toInteger()   // no problem, no need to cast  
  8.  
  9.     var = 123 
  10.     println var.toUpperCase() // error, var is int!  

 

上面代碼中 var 變量一開始是 int 類型,后來又賦值了字符串,“flow typing”算法可以理解賦值的順序,并指導 var 當前是字符串類型,這樣調用 Groovy 為 String 增加的 toInteger() 方法就沒問題。緊接著又賦值整數給 var 變量,但現在如果再次調用 toUpperCase() 就會報出編譯錯誤。

還有另外一些關于 “flow typing” 算法的特殊情況,當某個變量在一個閉包中被共享該會是怎么樣的一種情況呢?

 

  1. import groovy.transform.TypeChecked  
  2.  
  3. @TypeChecked test() {  
  4.     def var = "abc" 
  5.     def cl = {  
  6.         if (new Random().nextBoolean()) var = new Date()  
  7.     }  
  8.     cl()  
  9.     var.toUpperCase() // compilation error!  

 

var 本地變量先賦值了一個字符串,但是在閉包中會在一些隨機的情況下被賦值為日期類型數值。一般情況下這種只能在運行時才能報錯,因為這種錯誤是隨機發生的。因此在編譯時,編譯器是沒有機會知道 var 變量是字符串還是日期,這就是為什么編譯器無法得知錯誤的原因。盡管這個例子有點做作,但還有更有趣的情況:

 

  1. import groovy.transform.TypeChecked  
  2.  
  3. class A           { void foo() {} }  
  4. class B extends A { void bar() {} }  
  5.  
  6. @TypeChecked test() {  
  7.     def var = new A()  
  8.     def cl = { var = new B() }  
  9.     cl()  
  10.     // var is at least an instance of A  
  11.     // so we are allowed to call method foo()  
  12.     var.foo()  

 

在 test() 方法中,var 先被賦值為 A 的實例,緊接著在閉包中被賦值為 B 的實例,然后調用這個閉包方法,因此我們至少可以診斷 var 最后的類型是 A。

Groovy 編譯器的所有這些檢查都是在編譯時就完成了,但生成的字節碼還是跟一些動態代碼一樣,在行為上沒有任何改變。

原文鏈接:http://www.oschina.net/question/12_59498

責任編輯:林師授 來源: OSCHINA
相關推薦

2012-07-12 11:23:07

GroovyJVM

2023-01-05 08:09:27

GroovyDSL?

2023-01-06 08:06:52

Groovy類型擴展

2013-02-25 14:02:07

RubyWeb

2012-03-14 12:29:55

JavaPlay Framwo

2009-06-15 16:15:37

Spring2.0新特

2009-06-18 15:40:07

Spring Batc

2009-05-25 15:42:03

Visual StudC#

2009-07-30 14:55:43

ASP.NET 2.0

2018-05-30 15:10:24

Spring BootList類型

2011-09-30 14:15:10

Sencha ToucSencha Touc

2013-02-26 09:36:57

RubyRuby 2.0

2009-11-04 14:17:34

ADO.NET 2.0

2018-06-06 14:30:38

Spring BootApplication事件

2015-06-23 15:48:41

Swift 2.0iOS9

2012-07-02 10:40:24

GroovyJavaJVM

2011-05-20 09:59:42

JDK7

2009-07-03 17:40:35

JSP2.0

2021-07-08 18:10:03

2009-08-18 09:17:01

JavaScript2
點贊
收藏

51CTO技術棧公眾號

亚洲美女免费在线| 99热免费精品在线观看| 欧美一区二区人人喊爽| 日韩一级性生活片| 久青青在线观看视频国产| 蜜桃久久久久久| 欧美激情视频在线观看| 国精产品一区一区三区免费视频| 日韩在线激情| 午夜视频一区二区| 天堂v在线视频| 午夜激情在线视频| 精品亚洲国产成人av制服丝袜| 欧美激情xxxxx| 成年人看的免费视频| 大伊香蕉精品在线品播放| 欧美在线免费观看视频| 久久精品xxx| 免费看a在线观看| 91丨九色丨蝌蚪富婆spa| 亚洲va欧美va国产综合久久| 天天干天天干天天| 狠久久av成人天堂| 精品久久久999| 国产免费无遮挡吸奶头视频| youjizz亚洲| 6080午夜不卡| 成人综合视频在线| 久久av色综合| 日韩美女视频一区二区| 日韩啊v在线| 无码国产伦一区二区三区视频 | 欧美在线一区视频| 黄色在线免费看| 欧美国产97人人爽人人喊| 国内精品久久国产| 精品欧美一区二区精品少妇| 久久精品免费观看| 国产精品99久久久久久www| 日韩女同强女同hd| 欧美日韩精品免费观看视频完整| 色七七影院综合| 国产熟女一区二区| 免费成人av| 日韩激情片免费| 亚洲激情 欧美| jizz性欧美23| 精品久久久久久久人人人人传媒 | 国产无限制自拍| 午夜av在线播放| 亚洲人成亚洲人成在线观看图片| 亚洲精品在线观看免费| 国产视频在线看| 久久久久国产成人精品亚洲午夜| 久久久久久99| 青青青免费视频在线2| 99精品久久免费看蜜臀剧情介绍| 国产精品美女久久久久av福利| 亚洲成人77777| 粉嫩aⅴ一区二区三区四区五区 | 伊人精品一区| 亚洲色图17p| 人妻视频一区二区| 日韩国产专区| 日韩视频免费中文字幕| 亚洲aaa视频| 影音先锋成人在线电影| 美女扒开尿口让男人操亚洲视频网站| 爱爱视频免费在线观看| 欧美+亚洲+精品+三区| 欧美激情网站在线观看| 日韩和一区二区| 久久激情婷婷| 国产日本欧美在线观看| 国产精品一区二区黑人巨大| 国产成人在线看| 国产精选一区二区| 欧美亚洲日本| 中文字幕中文字幕一区二区| 2022中文字幕| 三妻四妾的电影电视剧在线观看| 一本大道av伊人久久综合| 岳毛多又紧做起爽| 国产精品亲子伦av一区二区三区| 制服丝袜av成人在线看| 日本不卡视频一区| 成人网18免费网站| 欧美男插女视频| 成年人免费高清视频| 免费高清成人在线| 成人免费视频观看视频| 偷拍25位美女撒尿视频在线观看| 欧美国产综合色视频| 欧美一区二区三区综合| 亚洲十八**毛片| 欧美日韩精品三区| 捆绑裸体绳奴bdsm亚洲| 日韩成人激情| 国外成人在线视频| 亚洲在线精品视频| 99re成人在线| 老司机午夜网站| 先锋欧美三级| 亚洲成人av在线| 超碰人人干人人| 亚洲久久一区| 91亚洲精品视频| 免费在线黄色网址| 亚洲自拍偷拍欧美| 亚洲老女人av| 欧美综合精品| 久久综合伊人77777蜜臀| 国产精品男女视频| 国产精品77777| 亚洲图色在线| 都市激情综合| 亚洲国模精品一区| www色aa色aawww| 日本成人超碰在线观看| 久久精品99久久| 国内在线免费视频| 制服丝袜日韩国产| 亚洲AV成人无码网站天堂久久| 国产精品日韩| 国产日韩一区二区三区| www在线观看播放免费视频日本| 色偷偷成人一区二区三区91 | 成人动态视频| 欧美大奶子在线| 一级二级三级视频| 国产欧美一区二区精品婷婷| 无码播放一区二区三区| 成人看片爽爽爽| 九九久久国产精品| 国产黄色一区二区| 亚洲欧美综合网| 杨幂毛片午夜性生毛片| 在线看成人短视频| 日本午夜在线亚洲.国产| 少妇高潮一区二区三区99小说| 亚洲欧洲日韩女同| xx欧美撒尿嘘撒尿xx| 国产一区二区欧美| 日韩美女视频中文字幕| 嫩草在线播放| 欧美视频中文字幕在线| 99久久免费看精品国产一区| 激情国产一区| 高清视频在线观看一区| 欧美xxxx免费虐| 日韩女优电影在线观看| 免费在线观看av网址| 国产成a人亚洲| 免费在线黄网站| 精品三级av| 青青草原成人在线视频| 美国一级片在线免费观看视频| 日本高清不卡视频| 久久久久久成人网| 激情久久五月天| 午夜久久久久久久久久久| 秋霞影院一区| 97视频免费看| 免费在线稳定资源站| 欧美日韩一区高清| 三上悠亚在线观看视频| 国产成人激情av| 免费无码不卡视频在线观看| 久草在线成人| 国产在线播放91| 午夜在线激情影院| 亚洲精品国产品国语在线| 懂色av蜜臀av粉嫩av分享吧最新章节| 国产视频一区在线播放| 999久久久精品视频| 欧美激情五月| 另类小说综合网| 成人午夜毛片| 欧美成人精品一区二区| 视频二区在线观看| 色婷婷综合久久久中文一区二区| 美国黄色特级片| 粉嫩在线一区二区三区视频| 日本久久久精品视频| 日本大胆欧美| 国产精品夜夜夜一区二区三区尤| 成人线上视频| 欧美精品一区二区免费| 亚洲三区在线播放| 欧美高清性hdvideosex| 日本视频www| 国产精品乱码久久久久久| 国产精品99久久久精品无码| 视频在线观看一区| 色呦呦网站入口| 亚洲综合小说图片| 亚洲综合成人婷婷小说| 亚洲插插视频| 色综合视频网站| 福利视频在线播放| 亚洲成人性视频| 亚洲午夜激情视频| 欧美视频不卡中文| 老女人性淫交视频| 国产欧美一区二区精品性色超碰| 污视频在线观看免费网站| 美女91精品| 国产夫妻自拍一区| 一区二区三区午夜视频| 欧美在线日韩精品| 粉嫩一区二区三区四区公司1| 国产精品日日摸夜夜添夜夜av| 不卡一本毛片| 久久精品国产99国产精品澳门| 亚洲 欧美 自拍偷拍| 欧美一区二区三区在线观看视频| 国产性生活视频| 亚洲va天堂va国产va久| 日本黄色小说视频| 国产精品国产三级国产普通话99 | 国精品一区二区三区| 亚洲欧美成人一区| 男男gay无套免费视频欧美| 福利视频久久| 国产资源一区| 国产精品国产三级国产专播精品人| 123区在线| 欧美日韩福利电影| 黄色在线视频网站| 久久精品国产2020观看福利| 亚洲麻豆精品| 中文字幕欧美日韩在线| 国产区在线视频| 亚洲欧美日韩一区二区三区在线| 天天综合网在线| 亚洲白虎美女被爆操| 亚洲精品一级片| 日韩欧美电影一区| 国产黄色一区二区| 日韩欧美第一区| 亚洲精品国产suv一区| 日韩欧美激情四射| www精品国产| 日韩精品一区国产麻豆| 成人高潮片免费视频| 日韩免费高清视频| 成人午夜福利视频| 亚洲国产精品人人爽夜夜爽| 人妻一区二区三区| 亚洲国产精品美女| 日韩二区三区| 伊人av综合网| 久热国产在线| 欧美高清视频免费观看| 白白色在线观看| 2025国产精品视频| 欧美aa视频| 国产精品美女久久久免费 | 欧美日韩精品一区二区三区四区| 91黄色在线视频| 日韩写真欧美这视频| 亚洲不卡免费视频| 精品无人区乱码1区2区3区在线| 日韩精品系列| 神马国产精品影院av| 午夜伦理大片视频在线观看| 午夜精品视频在线| 性欧美18一19sex性欧美| 国产精品普通话| 久久久久久亚洲精品美女| 操一操视频一区| 欧美在线导航| 一区二区视频在线播放| 国产精品v日韩精品v欧美精品网站 | 日本久久电影网| 一二区在线观看| 欧美一区二区观看视频| 污污的视频网站在线观看| 一区国产精品视频| 欧美xxxxhdvideosex| 国产不卡在线观看| 国产欧美视频在线| 久久国产精品精品国产色婷婷| 成人一二三区| 国产夫妻自拍一区| 美国av一区二区| 野战少妇38p| 国产精品女人毛片| 久久久精品视频免费| 欧美综合在线视频| 国产黄a三级三级三级| 亚洲欧美激情视频| 天堂va在线| 国产精品日韩久久久久| www.豆豆成人网.com| 亚洲欧美日韩另类精品一区二区三区| 国户精品久久久久久久久久久不卡| 国产第一页视频| 国产成人亚洲综合色影视| 国产免费一区二区三区网站免费| 亚洲黄色av一区| 亚洲一区二区影视| 日韩精品免费在线播放| h片在线免费| 国产精品日韩欧美综合| 日韩大片在线免费观看| 国产女人18毛片| 理论片日本一区| 中文字幕一区二区三区人妻| 一区二区三区在线免费播放| 中文字幕+乱码+中文字幕明步| 亚洲大胆人体av| 成人国产免费电影| 国产精品视频不卡| 亚洲欧洲免费| 国产不卡一区二区视频| 国产一区二区视频在线播放| 精品无码在线观看| 精品国产户外野外| 亚洲a视频在线| 久久福利网址导航| 免费视频观看成人| 日本在线播放不卡| 午夜在线一区二区| 精品国产人妻一区二区三区| 夜夜爽夜夜爽精品视频| 国产又粗又长视频| 日韩在线视频观看正片免费网站| 成人美女大片| 免费观看成人在线| 午夜影院日韩| 亚洲の无码国产の无码步美| 亚洲成人精品一区二区| 丰满人妻一区二区三区无码av| 久久综合久久美利坚合众国| 玖玖精品一区| 午夜啪啪福利视频| 国产精品一区二区在线播放| 色哟哟一一国产精品| 69精品人人人人| 韩国av网站在线| 91免费的视频在线播放| 91精品91| 日本成人在线免费| 一区二区不卡在线视频 午夜欧美不卡在 | 一本久道久久久| 成人免费无码大片a毛片| 欧美日韩国产丝袜另类| 天天干,夜夜操| 欧亚精品在线观看| 国产精品密蕾丝视频下载| 日韩 欧美 高清| 欧美国产一区二区| 国产尤物在线观看| 欧美精品一区在线播放| aiai久久| 欧美性久久久久| 中文字幕精品在线不卡| 国产精品久久久久久久免费 | 欧美日韩精品在线观看视频 | 超碰在线99| 欧美国产综合视频| 日本人妖一区二区| 黑鬼狂亚洲人videos| 欧美成人官网二区| 欧美激情20| 性欧美精品一区二区三区在线播放| 日韩av在线发布| 日本高清不卡免费| 亚洲成人黄色在线观看| 成人美女视频| youjizz.com亚洲| 粉嫩高潮美女一区二区三区| 日韩精品在线观看免费| 自拍偷拍免费精品| 亚洲一二av| 四虎永久在线精品无码视频| 中文字幕五月欧美| 日本波多野结衣在线| 国产精品扒开腿做爽爽爽视频| 亚洲色图网站| 国产高清自拍视频| 欧美日韩成人综合| 福利在线导航136| 色就是色欧美| 粉嫩aⅴ一区二区三区四区 | 青草av.久久免费一区| 毛片aaaaa| 在线观看亚洲视频| 国产成人澳门| 一女二男3p波多野结衣| 香蕉久久一区二区不卡无毒影院| 137大胆人体在线观看| 国产日韩欧美一区二区三区四区| 日本在线播放一区二区三区| 免费网站看av| xvideos国产精品| 要久久电视剧全集免费| 五月天六月丁香| 欧美亚洲国产怡红院影院|