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

Java下一代: 沒有繼承性的擴展,第 1 部分

開發 后端
Groovy、Scala 和 Clojure 提供了許多擴展機制,但繼承幾乎是 Java™ 語言的惟一選擇。這一期將介紹類別類、ExpandoMetaClass、隱式轉換和協議,借助它們來使用 Java 下一代語言擴展 Java 類。

Java 語言的設計有目的地進行了一定的刪減,以避免前代產品中已發現的一些問題。例如,Java 語言的設計人員感覺 C++ 中的多重繼承性帶來了太多復雜性,所以它們選擇不包含該特性。事實上,他們在該語言中很少構建擴展性選項,僅依靠單一繼承和接口。

其他語言(包括 Java 下一代語言)存在巨大的擴展潛力。在本期和接下來的兩期文章中,我將探索擴展 Java 類而不涉及繼承性的途徑。在本文中,您會了解如何向現有類添加方法,無論是直接還是通過語法糖 (syntactic sugar)。

表達式問題

表達式問題是最近的計算機科學歷史上的一個眾所周知的觀察結果,首創于貝爾實驗室的 Philip Wadler 的一篇未發表的論文(參見 參考資料)。(Stuart Sierra 在其 developerWorks 文章 “通過 Clojure 1.2 解決表達式問題” 中出色地解釋了它。在這篇文章中,Wadler 說道:

表達式問題是老問題的新名字。我們的目標是通過案例定義數據類型,在這里,在不重新編譯現有代碼的情況下,您可以將新的案例添加到數據類型和數據類型的新函數中,同時保留靜態類型安全(例如,沒有轉換)。

換句話說,您如何向一個分層結構中的類添加功能,而不求助于類型轉換或 if 語句?

我們將通過一個簡單的例子來表明表達式問題在真實世界中的表現形式。假設您公司始終假設應用程序中的長度單位為,沒有在您的類中為任何其他長度單位構建任何功能。但是,有一天,您公司與一家競爭對手合并了,而這個競爭對手始終假設長度單位為英尺

解決該問題的一種方法是,通過使用轉換方法擴展 Integer,使兩種格式之間的切換變得無關緊要。現代語言提供了多種解決方案來實現此目的;在本期中,我將重點介紹其中的 3 種:

  • 開放類
  • 包裝器類
  • 協議

Groovy 的類別和 ExpandoMetaClass

Groovy 包含兩種使用開放類 擴展現有的類的不同方式,“重新開放” 一個類定義來實現更改(例如添加、更改或刪除方法)的能力。

類別類

類別類(一種借鑒自 Objective-C 的概念)是包含靜態方法的常規類。每個方法至少接受一個參數,該參數表示方法擴充的類型。如果希望向 Integer 添加方法,例如我需要接受該類型作為第一個參數的靜態方法,如清單 1 所示:

清單 1. Groovy 的類別類

  1. class IntegerConv { 
  2.   static Double getAsMeters(Integer self) { 
  3.     self * 0.30480 
  4.   } 
  5.  
  6.   static Double getAsFeet(Integer self) { 
  7.     self * 3.2808 
  8.   } 

清單 1 中的 IntegerConv 類包含兩個擴充方法,每個擴充方法都接受一個名為 self(一個通用的慣用名稱)的 Integer 參數。要使用這些方法,我必須將引用代碼包裝在一個 use 代碼塊中,如清單 2 所示:

清單 2. 使用類別類

  1. @Test void test_conversion_with_category() { 
  2.   use(IntegerConv) { 
  3.     assertEquals(1 * 3.28081.asFeet, 0.1
  4.     assertEquals(1 * 0.304801.asMeters, 0.1
  5.   } 

清單 2 中有兩個特別有趣的地方。首先,盡管 清單 1 中的擴展方法名為 getAsMeters(),但我將它稱為 1.asMeters。Groovy 圍繞 Java 中的屬性的語法糖使我能夠執行 getAsMeters() 方法,好像它是名為 asMeters 的類的一個字段一樣。如果我在擴展方法中省略了 as,對擴展方法的調用需要使用空括號,就像 1.asMeters() 中一樣。一般而言,我喜歡更干凈的屬性語法,這是編寫特定于域的語言 (DSL) 的一種常見技巧。

清單 2 中第二個需要注意的地方是對 asFeetasMeters 的調用。在 use 代碼塊中,我同等地調用新方法和內置方法。該擴展在 use 代碼塊的詞法范圍內是透明的,這很好,因為它限制了擴充(有時是一些核心)類的范圍。

ExpandoMetaClass

類別是 Groovy 添加的第一種擴展機制。但事實證明對構建 Grails(基于 Groovy 的 Web 框架)而言,Groovy 的詞法范圍限制太多了。由于不滿類別中的限制,Grails 的創建者之一 Graeme Rocher 向 Groovy 添加了另一種擴展機制:ExpandoMetaClass

ExpandoMetaClass 是一種懶惰實例化的擴展持有者,它可從任何類 “成長” 而來。清單 3 展示了如何使用 ExpandoMetaClass,為我的 Integer 類實現我的擴展:

清單 3. 使用 ExpandoMetaClass 擴展 Integer

  1. class IntegerConvTest{ 
  2.  
  3.   static { 
  4.     Integer.metaClass.getAsM { -> 
  5.       delegate * 0.30480 
  6.     } 
  7.  
  8.     Integer.metaClass.getAsFt { -> 
  9.       delegate * 3.2808 
  10.     } 
  11.   } 
  12.  
  13.   @Test void conversion_with_expando() { 
  14.     assertTrue 1.asM == 0.30480 
  15.     assertTrue 1.asFt == 3.2808 
  16.   } 

在 清單 3 中,我使用 metaClass holder 添加 asMasFt 屬性,采用與 清單 2 相同的命名約定。對 metaclass 的調用出現在測試類的一個靜態初始化器中,因為我必須確保擴充操作在遇到擴展方法之前發生。

類別類和 ExpandoMetaClass 都在內置方法之前調用擴展類方法。這使您能夠添加、更改或刪除現有方法。清單 4 給出了一個示例:

清單 4. 取代現有方法的擴展類

  1. @Test void expando_order() { 
  2.   try { 
  3.     1.decode() 
  4.   } catch(NullPointerException ex) { 
  5.     println("can't decode with no parameters"
  6.   } 
  7.   Integer.metaClass.decode { -> 
  8.     delegate * Math.PI; 
  9.   } 
  10.   assertEquals(1.decode(), Math.PI, 0.1

清單4 中的第一個 decode() 方法調用是一個內置的靜態 Groovy 方法,它設計用于更改整數編碼。正常情況下,它會接受一個參數;如果調用時沒有任何參數,它將拋出 NullPointerException。但是,當我使用自己的 decode() 方法擴充 Integer 類時,它會取代原始類。

Scala 的隱式轉換

Scala 使用包裝器類 來解決表達式問題的這個方面。要向一個類添加一個方法,可將它添加到一個幫助類中,然后提供從原始類到您的幫助器的隱式轉換。在執行轉換之后,您就可以從幫助器隱式地調用該方法,而不是從原始類調用它。清單 5 中的示例使用了這種技術:

#p#

清單 5. Scala 的隱式轉換

  1. class UnitWrapper(i: Int) { 
  2.   def asFt = { 
  3.     i * 3.2808 
  4.   } 
  5.  
  6.   def asM = { 
  7.     i * 0.30480 
  8.   } 
  9.  
  10. implicit def unitWrapper(i:Int) = new UnitWrapper(i) 
  11.  
  12. println("1 foot = " + 1.asM + " meters"); 
  13. println("1 meter = " + 1.asFt + "foot"

在清單5中,我定義了一個名為 UnitWrapper 的幫助器類,它接受一個構造函數參數和兩個方法:asFtasM。在擁有轉換值的幫助類后,我創建了一個 implicit def,實例化一個新的 UnitWrapper。要調用該方法,可以像調用原始類的一個方法那樣調用它,比如 1.asM。當 Scala 未在 Integer 類上找到 asM 方法時,它會檢查是否存在隱式轉換,從而允許將調用類轉換為一個包含目標方法的類。像 Groovy 一樣,Scala 擁有語法糖,因此我能夠省略方法調用的括號,但這是一種語言特性而不是命名約定。

Scala 中的轉換幫助器通常是 object 而不是類,但我使用了一個類,因為我希望傳遞一個值作為構造函數參數(object 不允許這么做)。

Scala 中的隱式轉換是一種擴充現有類的精妙且類型安全的方式,但不能向開放類一樣,使用這種機制更改或刪除現有方法。

Clojure 的協議

Clojure 采用了另一種方法來解決表達式問題的這個方面,那就是結合使用 extend 函數和 Clojure 協議 抽象。協議在概念上類似于一個 Java 接口:一個沒有實現的方法簽名集合。盡管 Clojure 實質上不是面向對象的,而是偏向于函數,但您可以與類進行交互(并擴展它們),并將方法映射到函數。

為了擴展數字以添加轉換,我定義了一個協議,它包含我的兩個函數(asFasM)。我可使用該協議 extend 一個現有類(比如 Number)。extend 函數接受目標類作為第一個參數,接受該協議作為第二個參數,以及一個使用函數名為鍵并使用實現(以匿名函數形式)為值的映射。清單 6 顯示了 Clojure 單位轉換:

清單 6. Clojure 的擴展協議

  1. (defprotocol UnitConversions 
  2.   (asF [this]) 
  3.   (asM [this])) 
  4.  
  5. (extend Number 
  6.   UnitConversions 
  7.   {:asF (fn [this] (* this 3.2808)) 
  8.    :asM #(* % 0.30480)}) 

我可以在 Clojure REPL(interactive read-eval-print loop,交互式讀取-重新運算-打印循環)上使用新的擴展來驗證該轉換:

  1. user=> (println "1 foot is " (asM 1" meters"
  2. 1 foot is  0.3048  meters 

在清單6中,兩個轉換函數的實現演示了匿名函數聲明的兩種語法變體。每個函數只接受一個參數(asF 函數中的 this)。單參數函數很常見,以至于 Clojure 為它們的創建提供了語法糖,如 AsM 函數中所示,其中 % 是參數占位符。

協議創建了一種將方法(以函數形式)添加到現有類中的簡單解決方案。Clojure 還包含一些有用的宏,使您能夠將一組擴展整合在一起。例如,Compojure Web 框架(參見參考資料)使用協議擴展各種類型,以便它們 “知道” 如何呈現自身。清單 7 顯示了來自 Compojure 中的 Renderable 的一段代碼:

清單 7. 通過協議擴展許多類型

  1. (defprotocol Renderable 
  2.   (render [this request] 
  3.     "Render the object into a form suitable for the given request map.")) 
  4.  
  5. (extend-protocol Renderable 
  6.   nil 
  7.   (render [_ _] nil) 
  8.   String 
  9.   (render [body _] 
  10.     (-> (response body) 
  11.         (content-type "text/html; charset=utf-8"))) 
  12.   APersistentMap 
  13.   (render [resp-map _] 
  14.     (merge (with-meta (response "") (meta resp-map)) 
  15.            resp-map)) 
  16.   IFn 
  17.   (render [func request] 
  18.     (render (func request)  
  19.   ; . . . 

在清單 7中,Renderable 協議是使用單個 render 函數來定義的,該函數接受一個值和一個請求映射作為參數。Clojure 的 extend-protocol 宏(它可用于將協議定義分組到一起)接受類型和實現對。在 Clojure 中,您可使用下劃線代替不關心的參數。在清單7 中,這個定義的可看見部分為 nilStringAPersistentMapIFn(Clojure 中的函數的核心接口)提供了呈現指令。(該框架中還包含其他許多類型,但為節省空間,清單中省略了它們。)可以看到這在實踐中非常有用:對于您可能需要呈現的所有類型,您可將語義和擴展放在一起定義。

結束語

在本期中,我介紹了表達式問題,剖析了 Java 下一代語言如何處理以下方面:現有類的干凈擴展。每種語言都使用一種不同的技術(Groovy 使用開放類,Scala 使用包裝器類,而 Clojure 實現了協議)來實現類似的結果。

但是,表達式問題比類型擴充更深刻。在下一期中,我將繼續討論使用其他協議功能、特征和 mix-in 的擴展。

原文鏈接:http://www.ibm.com/developerworks/cn/java/j-jn5/index.html

責任編輯:陳四芳 來源: ibm.com
相關推薦

2013-07-27 21:28:44

2013-05-28 13:44:01

Java下一代

2013-06-27 11:21:17

2013-05-28 14:02:22

GroovyScala語言

2018-09-27 18:47:45

AIOpsDevOps

2020-09-27 17:27:58

邊緣計算云計算技術

2024-02-26 14:46:53

移動計算人工智能5G

2020-06-02 08:05:28

智能電表蜂窩物聯網NB-IoT

2018-09-11 08:00:00

DevOpsAIOps機器學習

2025-01-03 09:24:10

模型架構論文

2020-09-16 10:28:54

邊緣計算云計算數據中心

2022-08-08 11:50:45

AIOps網絡管理

2013-10-11 14:29:44

Java開發

2013-04-03 09:37:10

JavaJVM

2016-01-26 11:58:12

2013-09-09 16:28:36

2009-08-24 17:18:36

下一代網絡三網融合廣電網絡

2015-01-22 16:16:01

思科IT模式

2011-01-27 09:52:43

StuxnetZeus軟件攻擊

2010-09-01 17:05:04

無線網絡
點贊
收藏

51CTO技術棧公眾號

日本视频一区二区在线观看| 午夜精品久久久久久久久| 国产成人jvid在线播放| 老熟妇一区二区| 国产精品va在线观看视色| 国产一区在线观看视频| 日韩精品福利网站| 青草全福视在线| 日韩在线一区二区三区四区| 天堂一区二区在线| 精品国产一区二区在线观看| 欧美亚洲免费高清在线观看| 在线免费观看高清视频| 伊人久久久大香线蕉综合直播 | 国产又粗又大又爽视频| 在线欧美日韩| 色99之美女主播在线视频| 2025中文字幕| 黄色欧美视频| 久久精品一二三| 91久久国产精品91久久性色| 57pao精品| 分分操这里只有精品| 福利片在线观看| 成人午夜激情影院| 国产日韩欧美在线看| 亚洲GV成人无码久久精品| 欧美成人久久| 最新69国产成人精品视频免费| v天堂中文在线| 国产精品久久久久久久久久久久久久久 | 欧美日本在线播放| 无码人妻丰满熟妇区毛片| 羞羞网站在线免费观看| 久久精品国产一区二区三 | 成人动漫av在线| 成人黄色片网站| 在线观看国产区| 亚洲影视在线| 97久久精品国产| 久久网免费视频| 天天做天天爱综合| 一区二区三区天堂av| 少妇一级淫免费观看| 亚洲小说春色综合另类电影| 91精品综合久久久久久| 亚洲国产精品三区| 超薄肉色丝袜脚交一区二区| 色综合天天视频在线观看| 国产精品又粗又长| a级片在线免费观看| 亚洲午夜久久久久| 91.com在线| 欧美人与禽性xxxxx杂性| 国产精品69久久久久水密桃| 国产男人精品视频| 国模私拍一区二区| 日本伊人色综合网| 国产精品美女无圣光视频| 99精品人妻国产毛片| 母乳一区在线观看| 日韩美女在线播放| 羞羞色院91蜜桃| 久久se这里有精品| 亚洲综合在线播放| www日本高清视频| 成人午夜视频在线观看| 国产精品视频500部| 欧美天堂在线视频| 91农村精品一区二区在线| 国产99久久精品一区二区 夜夜躁日日躁 | 成年女人免费视频| 都市激情久久| 精品香蕉一区二区三区| 中文字幕免费高清| 久久网站免费观看| 欧美乱人伦中文字幕在线| 久久视频免费看| 亚洲永久免费| 国产日韩欧美成人| 国产黄色av片| 日日摸夜夜添夜夜添精品视频| 日韩免费观看视频| 在线视频 91| 国产1区2区3区精品美女| 久久精品人成| 亚洲美女免费视频| 成人激情免费在线| 精品人妻无码一区二区| av中文字幕不卡| 日韩一区二区三区资源| 国产一区二区三区中文字幕| 韩国午夜理伦三级不卡影院| 热99精品只有里视频精品| 免费观看日批视频| 日韩午夜黄色| 国产精品成人一区二区| 国产同性人妖ts口直男| 9i在线看片成人免费| 亚洲黄色一区二区三区| 青春草视频在线观看| 日韩欧美在线免费观看| 天天操精品视频| 免费av一区| 欧美日韩xxxxx| 日韩欧美国产另类| 国产成人精品影视| 视频一区二区三| 91高清视频在线观看| 欧美性xxxxxxxx| 中文成人无字幕乱码精品区| 欧美激情777| 欧美在线精品免播放器视频| 国产剧情久久久| 国产欧美精品日韩区二区麻豆天美 | 国产免费不卡av| 久久久www免费人成精品| 青青视频免费在线| 国产福利亚洲| 亚洲欧美国产精品| 久久久久久久极品内射| 蜜臀a∨国产成人精品| 欧美亚洲视频在线看网址| 国产乱色精品成人免费视频| www久久久久| 真实国产乱子伦对白视频| 欧美电影在线观看网站| 亚洲男子天堂网| 日本少妇xxxx动漫| 国产精品一区一区三区| 中文字幕一区二区三区在线乱码| 玛雅亚洲电影| 欧美性受xxxx黑人xyx性爽| 成年人小视频在线观看| 亚洲天天影视网| 91精品国产自产在线老师啪 | 黄色a级片免费| 看全色黄大色大片免费久久久| www国产精品com| 中文字幕福利视频| 国产综合色产在线精品| 日日夜夜精品网站| 日韩免费福利视频| 欧美日韩一区成人| 91精品国产自产| 成人久久综合| 欧美精品在线观看91| 亚洲一区二区三区网站| 欧美国产日本韩| 麻豆一区二区三区视频| 欧美日韩国产免费观看视频| 国产成人aa精品一区在线播放| 日本一本草久在线中文| 精品久久久久久国产| 久久久久成人精品无码中文字幕| 日韩午夜av在线| 欧美亚洲免费在线| 人人鲁人人莫人人爱精品| 亚洲视频在线播放| 日本黄色片免费观看| 麻豆一区二区三| 中文字幕中文字幕在线中一区高清| 国产精品久久久久久久久久辛辛 | 免费高清视频精品| 亚洲精品久久区二区三区蜜桃臀| 国产资源一区| 久久伊人精品天天| 亚洲天堂一区在线| 26uuu国产在线精品一区二区| 国产精品97在线| 成人中文在线| 99re在线国产| 涩涩av在线| 深夜成人在线观看| 亚洲av无码国产精品久久不卡 | 欧美超级免费视 在线| 成 人 黄 色 片 在线播放| 亚洲国产aⅴ成人精品无吗| 97人妻精品一区二区三区免| 欧美bbbbb| 日本丰满大乳奶| 精品亚洲免a| 国产精品免费网站| 综合久久2o19| 日韩精品在线视频美女| 亚洲图片欧美在线| 亚洲国产一区视频| 亚洲av无码国产精品麻豆天美| 精品亚洲aⅴ乱码一区二区三区| 国产精品av免费观看| 台湾佬综合网| 91黄在线观看| 欧美aa视频| 久久亚洲精品一区二区| 丝袜视频国产在线播放| 色综合av在线| 日韩一级片av| 国产日韩高清在线| 久久久久99人妻一区二区三区| 国产模特精品视频久久久久| 中文字幕不卡每日更新1区2区| 国内露脸中年夫妇交换精品| 国产精品美女久久久久久免费 | 三级av在线| 欧美一区二视频| 国产免费www| 精品久久久久久久久久久久久| 熟女av一区二区| 久久久久久久久免费| 丰满少妇一区二区三区专区 | 香蕉网在线视频| 亚洲欧美日韩综合国产aⅴ| 91xxx视频| 欧美三级三级| 欧美国产一二三区| 国产精品一区二区三区美女| 成人av在线天堂| 日韩精品免费观看视频| 欧美国产亚洲精品久久久8v| 日本免费在线视频| 亚洲人成亚洲人成在线观看| 色婷婷视频在线| 日韩欧美中文字幕精品| 一级黄色片免费看| 在线观看av一区二区| 欧美精品亚洲精品日韩精品| 亚洲一区av在线| 欧美成人一二三区| 亚洲欧美自拍偷拍| 又嫩又硬又黄又爽的视频| 国产亚洲一本大道中文在线| 黄色国产在线观看| 99久久夜色精品国产网站| 无码人妻一区二区三区免费n鬼沢| 狠狠色丁香久久婷婷综合丁香| 91最新在线观看| 久久综合五月| 成人在线免费播放视频| 亚洲激情视频| 免费拍拍拍网站| 亚洲国产国产亚洲一二三 | 热久久免费视频| 久久国产乱子伦免费精品| 国产欧美日本| aaaaaa亚洲| 天堂一区二区在线| 好男人www社区| 久久男女视频| 波多野结衣天堂| 免费在线看成人av| 在线观看国产福利| 久久国产麻豆精品| 最新av免费在线观看| 激情综合五月天| 久久精品一二三四| 成人美女视频在线看| a视频免费观看| 国产日韩亚洲欧美综合| 国产123在线| 国产精品福利影院| 丝袜 亚洲 另类 欧美 重口| 亚洲综合清纯丝袜自拍| 日韩乱码人妻无码中文字幕| 欧美日韩在线视频一区二区| 成人免费一级片| 欧美日本不卡视频| 成人高潮片免费视频| 亚洲第一在线视频| 中文字幕在线观看免费| 欧美日韩精品专区| 99热这里精品| 日韩av在线影院| 成年午夜在线| 久热99视频在线观看| f2c人成在线观看免费视频| 欧洲日本亚洲国产区| 成人激情视屏| 风间由美久久久| 女优一区二区三区| 亚洲最新免费视频| 亚洲国产激情| 午夜精品中文字幕| 成人一区二区三区视频在线观看| 香蕉网在线播放| 亚洲女性喷水在线观看一区| 免费日韩一级片| 欧美人与禽zozo性伦| 人妻与黑人一区二区三区| 亚洲欧洲免费视频| 伊人在我在线看导航| 日本中文字幕成人| 日本99精品| 色综合久久av| 亚洲三级免费| 伊人网在线综合| 91美女视频网站| 91日韩中文字幕| 欧美亚洲动漫精品| 污视频软件在线观看| 日韩欧美一级在线播放| 神马久久高清| 欧美久久精品午夜青青大伊人| 中文在线资源| 51精品国产人成在线观看| 精品一区av| 国产一区二区网| 国产乱码精品一区二区三区忘忧草 | 九九综合九九综合| 99久久久国产精品免费调教网站| 国产高清在线精品一区二区三区| 日韩av专区| 各处沟厕大尺度偷拍女厕嘘嘘| 精品一区精品二区高清| 一区二区黄色片| 亚洲成人tv网| www.日韩在线观看| 久久精品视频亚洲| 成人国产精品| 欧美连裤袜在线视频| 亚洲激情婷婷| 在线xxxxx| 一个色综合网站| 国产女人18毛片水真多| 在线观看视频亚洲| 电影一区二区三区| 好吊色欧美一区二区三区| 午夜欧美理论片| 超碰中文字幕在线观看| 国产精品理伦片| 亚洲中文字幕无码爆乳av| 亚洲片在线资源| 在线黄色的网站| 欧美极品色图| 噜噜噜在线观看免费视频日韩| 美女久久久久久久久| 亚洲国产一区二区三区青草影视| 国产精品久久免费| xvideos成人免费中文版| 999国产精品亚洲77777| 日韩欧美一区二区在线观看 | 国产精品免费看久久久香蕉| 精品欧美久久| 色免费在线视频| 国产精品婷婷午夜在线观看| 中文字幕网址在线| 最近日韩中文字幕中文| av在线国产精品| 欧美一级爱爱视频| 不卡一区在线观看| 久久夜色精品亚洲| 亚洲精品视频播放| 日韩av首页| 亚洲午夜精品久久久中文影院av | 欧美这里有精品| av中文资源在线| 成人黄色免费网站在线观看| 88国产精品视频一区二区三区| 国产5g成人5g天天爽| 亚洲国产精品麻豆| 殴美一级特黄aaaaaa| 欧美一区二区三区免费视| 综合国产视频| 中文字幕永久有效| 一级特黄大欧美久久久| 五月天丁香视频| 国产成人精品一区二区三区| 日韩av专区| 欧美激情一区二区三区p站| 午夜电影网亚洲视频| 玖玖综合伊人| 国产精品偷伦免费视频观看的 | 黑人糟蹋人妻hd中文字幕 | 国产视频欧美视频| 六九午夜精品视频| 国产一级不卡视频| 2021国产精品久久精品| 国产又黄又猛又爽| 国内精品视频在线| 成人在线免费观看网站| 91视频福利网| 在线视频国内自拍亚洲视频| 国产在线高清视频| 久久综合给合久久狠狠色| 久久电影国产免费久久电影 | 欧美亚洲免费在线一区| 69xxx在线| 欧美一区二区三区在线免费观看| 激情深爱一区二区| 日韩 欧美 综合| 在线中文字幕不卡| 大片免费在线观看| 久久精品中文字幕一区二区三区 | 91久久精品美女| 欧美一级播放| 强行糟蹋人妻hd中文| 亚洲网站在线播放| 国产精品一区二区三区美女| 粉色视频免费看| 日韩欧美亚洲范冰冰与中字| 国产精品久久麻豆|