精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

精品一卡二卡三卡四卡日本乱码| 欧美一级久久久| 日韩区国产区| 国产精品毛片一区二区在线看舒淇 | www国产视频| 久久久一本精品| 国产三级精品在线观看| 亚洲精品tv| 亚洲va欧美va人人爽| 日本不卡一二三区| a天堂中文在线观看| 国产精品久久久一区二区| 色婷婷av一区二区三区在线观看| 亚洲一二三不卡| 人人草在线视频| 国产精品国产三级国产| 国产综合18久久久久久| 一区二区久久精品66国产精品 | 色老头在线视频| 午夜久久久久| 中国china体内裑精亚洲片| 三上悠亚 电影| 亚洲mmav| 一本色道**综合亚洲精品蜜桃冫| 免费成人进口网站| 你懂的在线网址| 国产精品一二三区| 国产精品久久久久久亚洲调教| 九九热国产在线| 成人综合一区| 亚洲欧美精品一区二区| 国产在线a视频| 欧洲亚洲精品久久久久| 日本高清无吗v一区| av女优在线播放| gogo在线高清视频| 中文字幕成人av| 欧洲久久久久久| 五月天婷婷社区| 国产91丝袜在线播放| 成人情趣片在线观看免费| 无码人妻精品一区二区50| 亚洲经典自拍| 久久免费福利视频| 在线观看黄网址| 狠狠色丁香婷婷综合影院| 日韩成人在线电影网| 亚洲免费观看在线| 日韩精品三级| 欧美tickling网站挠脚心| 欧美又黄又嫩大片a级| 亚洲福利影视| 777亚洲妇女| 一区二区三区网址| 欧美va在线观看| 91久久奴性调教| 九色porny91| 日本黄色一区| 在线播放中文字幕一区| 亚洲 国产 图片| 四虎影视成人精品国库在线观看| 欧美少妇性性性| 成人亚洲精品777777大片| 97精品国产99久久久久久免费| 91福利精品视频| 久久撸在线视频| 精品中文字幕一区二区三区四区| 欧美一卡2卡三卡4卡5免费| 免费欧美一级片| 成人午夜网址| 国产丝袜高跟一区| 黄色裸体一级片| 欧美va天堂在线| 欧美大片在线看免费观看| 国产在线精品观看| 噜噜噜在线观看免费视频日韩| 国产精品人成电影在线观看| 91久久精品国产91性色69| 国产福利一区二区三区视频| 国产精品视频入口| 蝌蚪视频在线播放| 国产精品色哟哟| 色婷婷777777仙踪林| 欧美另类tv| 日韩欧美精品中文字幕| 欧美日韩亚洲自拍| 中文字幕一区二区三区日韩精品| 亚洲精品久久久久中文字幕欢迎你| 久久精品一区二区免费播放| 成人影院在线| 欧美精品激情视频| 日本一本在线观看| 国产精品一区二区你懂的| 久久99精品久久久久久久青青日本| 国产中文在线观看| 亚洲激情综合网| 超碰97人人射妻| 国产视频一区二| 亚洲美女动态图120秒| 潘金莲一级黄色片| 亚洲一区二区三区免费在线观看| 国产一区视频在线| www.99av.com| 日韩精品在线一区二区三区| 国产精品亚洲综合一区在线观看| 久久国产精品99久久久久久丝袜| 午夜不卡视频| 欧美日韩国产一区中文午夜| 8x8x成人免费视频| 久久91成人| 久久久久久久久久久免费| 一级片在线免费播放| 成人少妇影院yyyy| 一区二区三区观看| 欧美激情喷水| 精品国产123| 亚洲AV成人无码精电影在线| 巨乳诱惑日韩免费av| 国产精品久久一区二区三区| 中文字幕日本在线| 日韩欧美在线免费| 韩国三级hd两男一女| 天天揉久久久久亚洲精品| 日本精品一区二区三区在线播放视频| www.天堂在线| 亚洲视频小说图片| 在线免费视频a| 免费欧美一区| 91精品国产91久久久久久最新 | 精品一区二区国语对白| 久久综合精品一区| 金瓶狂野欧美性猛交xxxx| 555www色欧美视频| 最新日韩免费视频| 日韩—二三区免费观看av| 麻豆av一区| 高清精品在线| 亚洲精品国产品国语在线| 久草视频免费播放| 国产一区免费电影| 99亚洲精品视频| 日本久久久久| 久久精品99久久久久久久久| 6—12呦国产精品| 国产精品乱人伦| 免费看涩涩视频| 精品一区电影| 国产狼人综合免费视频| 婷婷视频在线| 欧美精品日韩一区| 国产精品久久久精品四季影院| 久久 天天综合| 日本道在线视频| 亚洲一区二区三区日本久久九| 欧美大奶子在线| 成人无码一区二区三区| 亚洲综合色网站| chinese麻豆新拍video| 国产日韩一区二区三区在线| 乱一区二区三区在线播放| 自拍偷拍欧美视频| 亚洲人成在线观| 中文字幕视频一区二区| 国产精品妹子av| 51自拍视频在线观看| 欧美日本中文| 精品亚洲一区二区三区四区五区高| 蜜桃av.网站在线观看| 日韩精品亚洲元码| 中文字幕黄色av| 日韩美女视频一区二区| 91人人澡人人爽| 免费日韩av片| 一区二区免费在线视频| 天堂va欧美ⅴa亚洲va一国产| 欧美激情在线狂野欧美精品| 国产精品久久久久久久久久ktv| 蜜桃视频在线入口www| 欧美色精品在线视频| 国产成人久久久久| 不卡av在线免费观看| 国产成人无码一二三区视频| 日韩欧美精品| 风间由美一区二区三区| 大胆人体一区| xxxxx成人.com| 人人妻人人澡人人爽久久av| 91国偷自产一区二区开放时间| 人人干在线观看| 成人午夜视频网站| 国产福利影院在线观看| 欧美日韩精选| 日日噜噜噜噜夜夜爽亚洲精品| 精品久久国产一区| 欧美综合在线第二页| 毛片在线看网站| 日韩精品久久久久| 国产露脸91国语对白| 婷婷激情综合网| 来吧亚洲综合网| 91在线观看地址| 一本之道在线视频| 99精品视频网| 潘金莲一级淫片aaaaaa播放1| 老司机aⅴ在线精品导航| 国产欧美日韩精品在线观看| 色呦呦网站在线观看| 日韩精品高清在线观看| 精品人妻一区二区三区浪潮在线| 色呦呦一区二区三区| 久久r这里只有精品| 国产午夜精品福利| 亚洲日本久久久| 精品在线播放午夜| 欧美日韩一区二区在线免费观看| 中国精品18videos性欧美| 日韩videos| 久久99国产精品久久99大师| 成人两性免费视频| 桃色一区二区| 午夜精品视频在线| 日韩激情av| 久久艳片www.17c.com| 九色在线视频| 日韩av一区在线| 国产高清在线观看视频| 精品视频123区在线观看| 国产精品7777777| 亚洲精品久久7777| 亚洲色图日韩精品| 久久精品男人的天堂| 中文字幕av观看| 成人听书哪个软件好| 中文字幕亚洲影院| 蜜臀av性久久久久蜜臀aⅴ| 97在线播放视频| 亚洲精品男同| 久久久久久免费看| 激情另类综合| 欧美一级视频在线播放| 欧美日韩 国产精品| 欧美a级黄色大片| 偷偷www综合久久久久久久| 亚洲制服中文| 日韩成人精品一区| 亚洲精品第一区二区三区| 欧美精品一二| 亚洲国产精品www| jvid福利在线一区二区| 日本欧美精品久久久| 视频一区中文| 日韩精品无码一区二区三区| 欧美激情在线免费| 欧美一区免费视频| 国产一区二区在线| 亚洲国产精品一区二区第四页av| 国产日产精品_国产精品毛片| 免费看污久久久| 深夜福利久久| 一区高清视频| 一区二区三区四区日韩| 日本中文字幕一级片| 欧美午夜一区| 欧美一级在线看| 首页国产欧美日韩丝袜| 免费一级特黄录像| 久久er99精品| 国产精品成人免费一区久久羞羞| 99久久久无码国产精品| 亚洲av成人片色在线观看高潮 | 欧美日韩亚洲另类| 国产一区二区三区视频免费观看| 91精品国产入口| 懂色av成人一区二区三区| 亚洲激情中文字幕| 黄色av网址在线免费观看| 曰本色欧美视频在线| 免费**毛片在线| 欧美极品少妇与黑人| 国产日韩电影| 91免费国产视频| 成人影院中文字幕| 日韩wuma| 亚洲高清毛片| 美女喷白浆视频| 国产一区免费电影| 波多野结衣 在线| 亚洲欧洲成人自拍| 日韩av一区二区在线播放| 在线视频一区二区三区| 国产乱码精品一区二区| 亚洲国产成人久久综合| 成人在线观看网站| 精品中文字幕在线2019| 黑人巨大精品| 91九色偷拍| 欧美少妇性xxxx| 中文精品无码中文字幕无码专区| 天堂精品中文字幕在线| 国产男女无遮挡猛进猛出| 久久一留热品黄| 久久久久久久久毛片| 色婷婷av一区二区| www.成人免费视频| 一区二区三区黄色| missav|免费高清av在线看| 国产精品久久不能| 岛国成人av| 椎名由奈jux491在线播放| 亚洲免费网址| 少妇伦子伦精品无吗| 国产精品麻豆久久久| 国产日产精品一区二区三区| 日韩一区二区三免费高清| 国产中文在线视频| 538国产精品一区二区在线| www.久久99| 神马影院我不卡| 亚洲欧美日本国产专区一区| 欧美专区第二页| 国产精品欧美久久久久一区二区| 日本三级一区二区| 日韩午夜激情视频| 黄色网在线播放| 国产精品影片在线观看| 免费久久精品| 国产主播在线看| www.亚洲色图.com| 久久久久香蕉视频| 欧美精品色综合| 麻豆网在线观看| 国产精品吴梦梦| av永久不卡| 国产精品拍拍拍| 久久九九国产精品| 亚洲免费在线视频观看| 亚洲国产日韩一区| 免费在线观看的电影网站| 91欧美激情另类亚洲| 色综合久久网| 99re精彩视频| 国产精品久久久久久久久果冻传媒 | 高清中文字幕mv的电影| 亚洲人成在线播放网站岛国| 91高潮大合集爽到抽搐| 中文字幕av一区| 成人免费黄色| 在线视频欧美一区| 久久99深爱久久99精品| 自拍偷拍第9页| 717成人午夜免费福利电影| 欧美另类极品| 亚洲a级在线播放观看| 欧美日韩国内| 伊人久久一区二区三区| 亚洲大片一区二区三区| 天天摸夜夜添狠狠添婷婷| 97人人爽人人喊人人模波多| 麻豆精品99| 成人在线观看a| 中文字幕免费不卡| 97精品久久人人爽人人爽| 不卡av日日日| 成人影院中文字幕| 男人的天堂99| 国产精品免费视频网站| 99久久国产热无码精品免费| 欧美精品在线第一页| 国产精品调教视频| 欧美 国产 小说 另类| 国产亚洲综合性久久久影院| 在线视频免费观看一区| 蜜臀久久99精品久久久久久宅男| 99re6热只有精品免费观看| 欧美日韩性生活片| 久久久91精品国产一区二区精品 | 一区二区在线中文字幕电影视频| 国产乱码字幕精品高清av| 日韩 国产 在线| 国产亚洲成av人片在线观看桃| 激情久久99| 阿v天堂2018| 国产色91在线| 国产高清视频免费观看| 日本精品久久中文字幕佐佐木| 成人a'v在线播放| 精品人妻一区二区三区免费| 精品久久久国产| 77导航福利在线| 国产成人精品福利一区二区三区| 久久久亚洲一区| 中文字幕在线有码| 亚洲男人的天堂在线播放| 成人在线啊v| 北条麻妃69av| 亚洲色图第一区| 欧美捆绑视频| av成人免费观看| 日韩激情视频在线观看| 欧美精品乱码视频一二专区|