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

如何避免Kotlin里的陷阱?

開發(fā) 后端
最近 Kotlin 特別流行,并且我也贊同 Kotlin 是一個經(jīng)過深思熟慮后被設(shè)計出的語言,除了下面提到的缺點之外。我會在本文向你分析一些我在開發(fā)過程中遇到的陷阱,并且教你如何避免他們。

最近 Kotlin 特別流行,并且我也贊同 Kotlin 是一個經(jīng)過深思熟慮后被設(shè)計出的語言,除了下面提到的缺點之外。我會在本文向你分析一些我在開發(fā)過程中遇到的陷阱,并且教你如何避免他們。

[[207040]]

謎一樣的 null

在 Kotlin 當(dāng)中,你可以不用考慮在你的代碼中如何處理 null 的問題,這會讓你忘記 null 是無處不在的這個說法,只不過被隱藏了起來。看看下面這個表面看起來沒有問題的類: 

  1. class Foo { 
  2.     private val c: String 
  3.     init { 
  4.         bar() 
  5.         c = "" 
  6.     } 
  7.     private fun bar() { 
  8.         println(c.length) 
  9.     } 

如果你嘗試初始化這個類,那么代碼就會拋出一個 NullPointerException。因為 bar 方法嘗試在 c 變量初始化之前就訪問它。

盡管這個代碼本身就是有問題的,才導(dǎo)致異常拋出。但是更糟糕的是你的編譯器不會發(fā)現(xiàn)這一點。

Kotlin 可以幫你在絕大部分情況下避免 null,但是你不能因此而忘記 null 的存在。否則遲早有一天你會碰上類似的問題。

來自 JDK 的 null

Kotlin 的標(biāo)準(zhǔn)庫能夠很好地處理 null。但是如果你使用了 JDK 中的類,你需要自己處理關(guān)于 JDK 方法調(diào)用可能產(chǎn)生的空指針。

大部分情況下 Kotlin 的標(biāo)準(zhǔn)庫就足夠了,但是有時你需要使用到 ConcurrentHashMap: 

  1. val map = ConcurrentHashMap<String, String>() 
  2. map["foo"] = "bar" 
  3. val bar: String = map["foo"]!! 

這時,你需要使用 !! 操作符。但某些情況下你還可以使用像 (?) 這樣的對 null 安全的操作符來替換它。盡管如此,當(dāng)你使用 !! 或者 ? ,或者編寫了一個適配器來使用 Java 類庫的時候,你會發(fā)現(xiàn)代碼因為這些修改而變的混亂。這是你無法避免的問題。

你還可能會碰上更多更可怕的問題。當(dāng)你使用 JDK 類中的方法的時候,返回值可能是null,而且沒有什么像 Map 訪問一樣的語法糖。

考慮如下例子: 

  1. val queue: Queue<String> = LinkedList() 
  2. queue.peek().toInt() 

這種情況下,你使用了可能返回 null 值的 peek 方法。但是 Kotlin 編譯器不會提示你這個問題,所以當(dāng)你的 Queue 是空隊列的的時候,可能會觸發(fā) NullPointerException 異常。

問題在于我們使用的 Queue 是 JDK 的一個接口,并且當(dāng)你查看 peek 方法的文檔時: 

  1. /** 
  2.   * Retrieves, but does not remove, the head of this queue, 
  3.   * or returns {@code null} if this queue is empty. 
  4.   * 
  5.   * @return the head of this queue, or {@code null} if this queue is empty 
  6.   */ 
  7.   E peek(); 

文檔中說 peek 方法會返回一個 E 類型的對象,但是 Kotlin 認(rèn)為 E 是不可空的。在接下來的 Kotlin 版本中可能會解決這個問題,但是現(xiàn)在當(dāng)你在你的工程中使用類似接口的時候,一定要注意: 

  1. val queue: Queue<String?> = LinkedList() 
  2. queue.peek()?.toInt() 

內(nèi)部 it

當(dāng)一個 lambda 表達(dá)式只有一個參數(shù)的時候,你可以在你的代碼中將其省略,并用 it 代替。

  • it:單參數(shù)的內(nèi)部名稱。當(dāng)你表達(dá)式只有一個參數(shù)的時候,這是一個很有用的特性,聲明的過程可以省略(就像 ->),并且參數(shù)名稱為 it。

問題是,當(dāng)你的代碼中存在向下面例子一樣的嵌套函數(shù)的時候: 

  1. val list = listOf("foo.bar""baz.qux"
  2. list.forEach { 
  3.     it.split(".").forEach { 
  4.         println(it) 
  5.     } 

it 參數(shù)會混淆。解決方法就是像下面這樣顯示的聲明: 

  1. list.forEach { item -> 
  2.     item.split(".").forEach { part -> 
  3.         println(part) 
  4.     } 

看起來是不是好多了!

隱藏的復(fù)制

注意觀察下面的類:

  1. data class Foo(val bars: MutableList) 

data 類提供了一系列的方法,并且你可以通過拷貝得到其鏡像。猜猜下面的代碼會輸出什么? 

  1. val bars = mutableListOf("foobar""wombar"
  2. val foo0 = Foo(bars) 
  3. val foo1 = foo0.copy() 
  4. bars.add("oops"
  5. println(foo1.bars.joinToString()) 

 控制臺會輸出 foobar, wombar, oops。問題出在 copy 方法并沒有真正地復(fù)制一個完整的對象, 而是復(fù)制了對象的引用。當(dāng)你忘記編寫單元測試類,并且將你的 data 類按照不可變類來傳遞的時候,就可能出現(xiàn)這種問題。

解決方法就是當(dāng)你使用 data 類的時候一定要多加小心,并且當(dāng)你必須將其作為值對象的時候,像下面這樣:

  1. data class Foo(val bars: List) 
  • data 類還有一個問題:其 equals / hashCode 方法所用到的屬性不可變。你只能通過手工重寫這些方法的方式來修改返回值。謹(jǐn)記上面這一點。

內(nèi)部方法暴露

仔細(xì)思考下面的例子: 

  1. class MyApi { 
  2.     fun operation0() { 
  3.     } 
  4.     internal fun hiddenOperation() {             
  5.     } 

當(dāng)你在 Kotlin 的項目中引用這個類的時候,internal 關(guān)鍵字是生效的。但是當(dāng)你從一個 Java 項目中使用的時候,hiddenOperation 就變成了一個公共方法!為了避免這種情況,我建議使用接口的方式來隱藏實現(xiàn)的細(xì)節(jié): 

  1. interface MyApi { 
  2.     fun operation0() 
  3. class MyApiImpl: MyApi { 
  4.     override fun operation0() { 
  5.     } 
  6.     internal fun hiddenOperation() { 
  7.     } 

特殊的全局?jǐn)U展

毫無疑問,擴(kuò)展函數(shù)的功能非常重要。但通常,能力越大責(zé)任越大。例如,你可以編寫全局的 JDK 類擴(kuò)展函數(shù)。但是當(dāng)這個函數(shù)只在本地上下文中有意義,卻是全局可見的時候,就會帶來很多麻煩。 

  1. fun String.extractCustomerName() : String { 
  2.     // ... 

每個跳轉(zhuǎn)到你的方法的人都會不知所措。所以我認(rèn)為在你編寫這樣的方法之前務(wù)必三思。下面就是一個建議: 

  1. /** 
  2.  * Returns an element of this [List] wrapped in an Optional 
  3.  * which is empty if `idx` is out of bounds. 
  4.  */ 
  5. fun <T> List<T>.getIfPresent(idx: Int) = 
  6.         if (idx >= size) { 
  7.             Optional.empty() 
  8.         } else { 
  9.             Optional.of(get(idx)) 
  10.         } 
  11. /** 
  12.  * Negates `isPresent`. 
  13.  */ 
  14. fun <T> Optional<T>.isNotPresent() = isPresent.not() 

lambdas Unit 返回值 vs Java SAM 轉(zhuǎn)換

如果你的函數(shù)參數(shù)是 lambdas 表達(dá)式,并且返回值類型是 Unit 的時候,你可以省略return 關(guān)鍵字: 

  1. fun consumeText(text: String, fn: (String) -> Unit) { 
  2. // usage 
  3. consumeText("foo") { 
  4.     println(it) 

這是一個很有趣的特性,但是當(dāng)你在 Java 代碼中調(diào)用該方法的時候會比較尷尬: 

  1. consumeText("foo", (text) -> { 
  2.     System.out.println(text); 
  3.     return Unit.INSTANCE; 
  4. }); 

這對于 Java 端來說是不友好的,如果你想在 Java 中成功調(diào)用該方法,你需要定義如下接口: 

  1. nterface StringConsumer { 
  2.     fun consume(text: String) 
  3. fun consumeText(text: String, fn: StringConsumer) { 

然后你就能使用 Java 的 SAM 轉(zhuǎn)換。

  1. consumeText("foo", System.out::println); 

但是在 Kotlin 這邊看起來就很糟糕了: 

  1. consumeText("foo", object: StringConsumer { 
  2.     override fun consume(text: String) { 
  3.         println(text) 
  4.     } 
  5. }) 

問題關(guān)鍵點在于只有 Java 支持 SAM 轉(zhuǎn)換,Kotlin 并不支持。我的建議是簡單的場景中,只是用 Java 的 SAM 接口作為一個消費者: 

  1. fun consumeText(text: String, fn: Consumer<String>) { 
  2. // usage from Kotlin 
  3. consumeText("foo", Consumer { 
  4.     println(it) 
  5. }) 
  6. // usage from Java 
  7. consumeText("foo", System.out::println); 

Java 中使用不可變集合

Kotlin 提供了 JDK 集合類的不可變版本。 

  1. fun createSet(): Set<String> = setOf("foo"
  2. // ... 
  3. createSet().add("bar") // oops, compile error 

這是一個很好的補(bǔ)充。但是當(dāng)你在看 Java JDK 的 Set 類 API 的時候會發(fā)現(xiàn):

  1. createSet().add("bar"); // UnsupportedOperationException 

當(dāng)你嘗試修改這個 Set 的時候,就會拋出這個異常,就像你使用了Collections.unmodifiableSet() 方法一樣。我不知道這種情況是否合理,但是你在使用 Kotlin 不可變版本的 Java 集合類的時候,需要謹(jǐn)記這一點。

接口中沒有重載

Kotlin 在接口上不支持使用 @JvmOverloads 注解,當(dāng)然 override 也不行。 

  1. interface Foo { 
  2.     @JvmOverloads // OUCH! 
  3.     fun bar(qux: String) 
  4. class FooImpl : Foo { 
  5.  
  6.     @JvmOverloads // YIKES! 
  7.     override fun bar(qux: String) { 
  8.     } 

你只能像下面這樣手動定義: 

  1. interface Foo { 
  2.     fun bar() 
  3.     fun bar(qux: String) 

要記住你可以使用 Kotlin 中的 KEEP (Kotlin Evolution and Enhancement Process) 來改善。KEEP 與 Java 中的 JEP 類似,但是與 JEP 相比要簡潔許多。

總結(jié)

Kotlin 現(xiàn)下很流行,并且我也認(rèn)為他是一個增強(qiáng)版的 Java。但是在使用 Kotlin 的時候你仍需要保持清醒,尤其是當(dāng)你身處各種各樣的關(guān)于 Kotlin 的宣傳之中時。如果你要使用 Kotlin 的話,一定要注意我們在上面提到的 Kotlin 相關(guān)的缺陷。

***我還是想說,上述提到的問題都比較容易解決,并且不會對語言的使用方面帶來本質(zhì)性的傷害。

責(zé)任編輯:未麗燕 來源: 程序師
相關(guān)推薦

2021-03-01 15:52:14

開源開源軟件陷阱

2021-04-22 11:22:12

云計算數(shù)據(jù)遷移混合云

2018-06-11 15:26:47

云計算企業(yè)云陷阱

2019-02-11 10:00:23

云網(wǎng)絡(luò)云平臺微服務(wù)

2022-09-19 09:19:24

云存儲TCO云服務(wù)

2014-07-11 10:23:54

2015-06-02 11:10:20

2011-06-07 15:34:15

2024-11-06 09:44:22

2025-05-28 03:20:00

布爾值編程True

2021-07-16 10:27:07

ITIT領(lǐng)導(dǎo)IT管理

2013-01-06 10:15:02

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

2013-06-21 10:15:33

BYOD

2022-10-11 07:20:56

YAML字符串語言

2024-03-04 13:23:00

數(shù)字化轉(zhuǎn)型

2022-03-17 18:26:42

微前端

2018-11-18 16:31:14

Kubernetes監(jiān)控容器

2021-02-28 13:19:42

大數(shù)據(jù)IT數(shù)據(jù)管理

2025-04-22 07:10:00

2023-10-04 07:38:20

架構(gòu)架構(gòu)設(shè)計領(lǐng)域
點贊
收藏

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

久久福利视频一区二区| 欧美色女视频| 狠狠色狠色综合曰曰| 日韩啊v在线| 国产精品久久影视| 精品动漫av| 一区二区亚洲精品国产| 久久精品无码一区二区三区毛片| 成年网站在线视频网站| 国产校园另类小说区| 亚洲一区二区久久久久久久| 日韩av大片在线观看| 久久人人88| 亚洲精品美女网站| 伊人色在线观看| 在线观看v片| 亚洲人精品午夜| 欧美日韩日本网| 亚洲欧美另类一区| 麻豆中文一区二区| 欧美亚洲国产视频小说| 国产精品视频一区二区三| 影视先锋久久| 精品国产亚洲一区二区三区在线观看| 人妻无码视频一区二区三区| 国产精品国精产品一二| 国产精品国产三级国产普通话三级| 福利视频久久| 国产一区二区视频免费观看| 欧美一级视频| 97国产在线视频| 欧美极品视频在线观看| 日产精品一区二区| 亚洲欧洲偷拍精品| 国产精品久久无码| 国内精品视频| 欧美剧在线免费观看网站| 亚洲中文字幕久久精品无码喷水| bl视频在线免费观看| 亚洲精品国产视频| 久久精品国产精品亚洲精品色| 国产在线观看黄| 99re亚洲国产精品| 国产伦精品一区二区三毛| 国产免费叼嘿网站免费| 老司机精品视频在线| 国产成人亚洲精品| youjizz在线视频| 国产一区二区三区的电影| 欧美国产精品va在线观看| 久久高清内射无套| 亚洲精品极品少妇16p| 久久精品亚洲94久久精品| 久久免费手机视频| 日韩欧美二区| 最新的欧美黄色| 中文字幕第69页| 99久久综合狠狠综合久久aⅴ| 一级做a爰片久久毛片美女图片| 成人h动漫精品一区| 神马香蕉久久| 亚洲视频在线观看网站| 这里只有久久精品| heyzo久久| 日韩在线视频导航| 亚洲不卡在线播放| 欧美va天堂| 欧美黑人一级爽快片淫片高清| 五月天丁香激情| 亚洲美女一区| 国产97色在线| 中文字幕永久在线观看| 精品一区二区在线免费观看| 91久久精品久久国产性色也91| 国产又粗又大又黄| 风流少妇一区二区| 精品国产一区二区三区麻豆小说 | 久久国产精品国产精品| 亚洲欧美久久精品| 日韩女优毛片在线| 国产肉体xxxx裸体784大胆| 久久99久久人婷婷精品综合| 在线视频精品一| 永久免费看mv网站入口| 最新成人av网站| 国产91在线播放九色快色| 一本到在线视频| 国产成人免费xxxxxxxx| 久久婷婷开心| 日本在线免费看| 亚洲国产精品精华液网站| 69堂免费视频| 婷婷久久综合九色综合99蜜桃| 日韩午夜精品视频| 魔女鞋交玉足榨精调教| 一区二区三区午夜视频| 97在线免费观看视频| 波多野结衣在线观看一区| 国产精品99久久久久久久女警 | 亚洲最大视频网| 亚洲传媒在线| 美女av一区二区三区| 99热在线观看免费精品| 久久精品国产秦先生| 国产欧美日韩视频一区二区三区| 国产三级视频在线看| 亚洲最大成人网4388xx| 日本成人中文字幕在线| 国产精品丝袜在线播放| 色综合伊人色综合网| 日韩av在线播| 精品在线一区二区三区| 欧美男人的天堂| 新版中文在线官网| 欧美亚洲自拍偷拍| 午夜久久久久久久| 亚洲精品国产首次亮相| 国产精品黄色影片导航在线观看| 亚洲国产精品久久人人爱潘金莲 | 300部国产真实乱| 日本精品网站| 日韩精品在线电影| 久久精品波多野结衣| 久久国产精品99久久人人澡| 久久精品二区| 久久一卡二卡| 欧美一区二区三区四区高清| 国产毛片欧美毛片久久久| 亚洲精品影院在线观看| 91入口在线观看| 免费在线观看av网站| 在线观看网站黄不卡| 免费a级黄色片| 在线欧美福利| 国产精品18毛片一区二区| 在线中文字幕-区二区三区四区 | 超碰在线播放97| 日韩毛片视频在线看| 国产超碰在线播放| 国产成人精品免费视| 欧美一级电影在线| 神马一区二区三区| 欧美日韩国产一中文字不卡| 中文字幕三级电影| 亚洲精选国产| 国产一区二区在线观看免费播放 | 奇门遁甲1982国语版免费观看高清 | 久久久久久久久免费视频| 欧美日韩一区二区三区在线| 妺妺窝人体色WWW精品| 久久在线91| 日韩亚洲欧美精品| 韩国精品主播一区二区在线观看| 亚洲一区二区久久久| 91青青草视频| 中文字幕成人网| 伊人影院综合在线| 91成人网在线观看| 91嫩草国产在线观看| 高h视频在线播放| 亚洲黄页视频免费观看| 性无码专区无码| 国产亚洲欧美在线| 性生活免费在线观看| 久久久国产精品| 不卡视频一区二区| 高清精品在线| 亚洲日本成人网| 亚洲一级在线播放| 亚洲精品菠萝久久久久久久| 亚洲精品无码一区二区| 亚洲尤物在线| 亚洲视频电影| 日韩中文字幕| 97视频在线看| 香蕉视频在线看| 精品久久久久久久久久久久包黑料| 久久久久久久99| 国产日韩精品一区二区三区 | 国产91精品在线观看| 奇米影视亚洲色图| 国产精品欧美在线观看| 91亚洲国产成人久久精品网站| 亚洲综合在线做性| 精品在线视频免费| 久久久久成人黄色影片| 波多结衣在线观看| 欧美日韩亚洲一区二区三区在线| 99久久伊人精品影院| 欧洲一区二区三区精品| 欧美精品做受xxx性少妇| 亚洲日本国产精品| 欧美乱妇一区二区三区不卡视频| 久久久久亚洲AV| 久久九九久精品国产免费直播| gogogo高清免费观看在线视频| 欧美高清日韩| 日韩理论片在线观看| 精品一区二区三区亚洲| 日本高清视频一区| 亚洲丝袜一区| 在线观看免费高清视频97| www.成人免费视频| 欧美性猛交xxxx乱大交退制版 | 北条麻妃国产九九九精品小说| 999热视频| 成人亚洲网站| 2025国产精品视频| 国产精品剧情| 亚洲免费高清视频| 精品免费久久久| 欧美性大战久久| 成年人免费高清视频| 夜夜揉揉日日人人青青一国产精品| 伊人网在线视频观看| 国产精品18久久久久久久久久久久| 99视频精品免费| 国产精品日韩精品欧美精品| 大地资源网在线观看免费官网| 欧美理论电影大全| 久久久久久亚洲精品不卡4k岛国 | 欧美一区二区三区视频免费播放| 亚洲av无码不卡| 欧美午夜激情在线| 五月天婷婷丁香| 亚洲综合丝袜美腿| 日韩精品一区二区三区在线视频| 国产三级精品三级在线专区| 中国极品少妇videossexhd| 国产成人综合精品三级| 中文字幕永久有效| 日韩国产高清在线| 男人天堂成人在线| 久久精品主播| 国产a视频免费观看| 99riav1国产精品视频| 精品视频在线观看一区| 极品裸体白嫩激情啪啪国产精品| 91麻豆天美传媒在线| 91精品国产乱码久久久久久久| 亚洲国产欧美一区二区三区不卡| 免费国产自久久久久三四区久久| 精品视频在线观看| 欧洲亚洲成人| 欧美凹凸一区二区三区视频| 偷拍精品福利视频导航| 久久伊人一区二区| 西瓜成人精品人成网站| 精品国产一区二区三区免费| 欧美电影完整版在线观看| 精品网站在线看| 亚洲毛片免费看| 欧洲精品国产| 99久久综合| 日韩中文字幕在线不卡| 狠狠爱www人成狠狠爱综合网| 成人一级生活片| 夜夜嗨一区二区三区| 国产主播在线看| 日韩不卡一区二区三区| 天天干天天草天天| 国产在线一区二区| 久久久久久久久久影视| 91蝌蚪porny| 1024手机在线观看你懂的| 国产精品理论片| 天天干中文字幕| 精品日本美女福利在线观看| 欧美日韩在线视频播放| 欧美日韩国产一级片| 99久久精品日本一区二区免费| 日韩久久免费av| 日韩一区二区三区中文字幕| 在线视频中文亚洲| 欧美性爽视频| 欧洲美女7788成人免费视频| 国产亚洲欧美日韩精品一区二区三区 | 亚洲人高潮女人毛茸茸| 久操视频在线播放| 97免费视频在线播放| 日本肉肉一区| 99视频免费观看蜜桃视频| 视频福利一区| 中国成人在线视频| 亚洲激情社区| 日日噜噜夜夜狠狠| 国产馆精品极品| 最近中文字幕免费| 一区二区三区久久| 青青草视频在线观看免费| 91精品国产91久久综合桃花| 亚洲av成人无码网天堂| 最新国产成人av网站网址麻豆| 欧美xxxx做受欧美88bbw| 国产成人精品免高潮费视频| 涩涩屋成人免费视频软件| 茄子视频成人在线观看 | 中文字幕av一区二区三区| 2021亚洲天堂| 欧美三级韩国三级日本三斤| 人妻精品一区一区三区蜜桃91| 中文字幕一精品亚洲无线一区| bl视频在线免费观看| 成人免费视频97| 九九综合在线| 精品人妻人人做人人爽| 美女一区二区视频| 少妇真人直播免费视频| 亚洲黄色片在线观看| 在线免费观看中文字幕| 亚洲欧美国产一区二区三区| 日韩专区av| 91亚洲精品久久久久久久久久久久| 无码日韩精品一区二区免费| 蜜臀av性久久久久蜜臀av| 日本午夜一区二区| 六十路息与子猛烈交尾| 亚洲中国最大av网站| 一区二区三区播放| 国产一区二区日韩精品欧美精品| aaa在线播放视频| 99视频国产精品免费观看| 2023国产精品久久久精品双| 激情五月婷婷久久| 久久九九影视网| 国产成人免费看| 亚洲精品999| 9999热视频在线观看| 国产精品国产精品| 欧美在线免费一级片| 亚洲一区二区福利视频| 欧美激情在线免费观看| 亚洲中文字幕无码爆乳av| 亚洲人高潮女人毛茸茸| 精品欧美一区二区三区在线观看 | 亚洲综合影视| 亚洲精品欧美一区二区三区| 亚洲成人最新网站| 永久av免费在线观看| 亚洲欧美日韩精品久久久久| 一区二区日韩视频| 北条麻妃一区二区三区中文字幕| 成人黄色免费观看| 午夜精品视频在线观看一区二区| 丝袜亚洲另类欧美综合| 野花社区视频在线观看| 欧美日韩国内自拍| 日韩美女一级视频| 日本中文字幕成人| 不卡在线一区二区| 蜜臀一区二区三区精品免费视频| 国产精品欧美极品| 国产一区二区视频免费观看| 美女999久久久精品视频| 中文字幕一区二区三区日韩精品 | 国精产品一区一区二区三区mba | 三级av免费观看| 中文字幕综合网| 国产成人精品亚洲精品色欲| 欧美黑人一级爽快片淫片高清| 高清日韩欧美| 欧美在线观看成人| 国产欧美日韩综合| 国产又黄又大又爽| 久久久久中文字幕| 你懂的一区二区三区| jizz欧美性11| 亚洲一区二区三区中文字幕在线 | 亚洲小说春色综合另类电影| www.av中文字幕| 国产人成亚洲第一网站在线播放 | 精品国产一区二区精华| 原纱央莉成人av片| 亚洲精品中文字幕在线| 国产精品亚洲成人| 可以免费看的av毛片| 伊人精品在线观看| 欧美午夜网站| 欧美日韩亚洲一| 国产精品电影院| 手机在线精品视频| 国产欧美一区二区三区久久人妖 | 成人高潮片免费视频| 777精品视频| 婷婷综合伊人| 日本japanese极品少妇| 欧美日韩黄色影视| 好看的中文字幕在线播放| 日产精品久久久一区二区| 国产福利不卡视频| 亚洲 国产 日韩 欧美| 色综合久久久888| 国产在线观看91一区二区三区| √天堂资源在线| 色天天综合久久久久综合片| 97caopron在线视频| 日韩成人av电影在线| 粉嫩蜜臀av国产精品网站| 国产女优在线播放| 91精品国产高清久久久久久久久|