欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

開源工具 — Apache Commons Lang(1)

系統(tǒng) 1987 0

相信Apache的大名各位一定不會陌生,Java領(lǐng)域中常用的Ant,Maven,Struts1~2等都是托管在Apache下的項(xiàng)目,而在使用Apache框架的時(shí)候,通常要添加框架的依賴包,包括apache-commons系列的依賴包,相信讀者對此也不會陌生,而apache-common是非常有用的工具包,包含了很多開源的工具,用于解決平時(shí)編程經(jīng)常會遇到的問題,減少重復(fù)勞動(dòng) ?


????? 一個(gè)優(yōu)秀的類應(yīng)該重寫toString,hashCode,equals,compareTo方法,我們來看一下apache如何帶我們簡化這些操作,以下示例支持兩種形式,一種是通過逐個(gè)參數(shù)添加從而精細(xì)控制那些參數(shù)參與比較和輸出,另一種是通過反射讓全部參數(shù)都參與比較和輸出 ?

????? Builder系列 ?

Java代碼 ? ?
  1. //ToStringBuilder ??
  2. @Override ??
  3. public ?String?toString()?{??
  4. ???? return ? new ?ToStringBuilder( this ).append( this .getId())??
  5. ????????????.append( this .getUsername()).toString();??
  6. }??
  7. ??
  8. @Override ??
  9. public ?String?toString()?{??
  10. ???? return ?ToStringBuilder.reflectionToString( this );??
  11. }??
  12. //?以上輸出格式為??Test@1270b73[<null>,<null>] ??
  13. ??
  14. ??
  15. ??
  16. //?HashCodeBuilder ??
  17. @Override ??
  18. public ? int ?hashCode()?{??
  19. ???? return ?HashCodeBuilder.reflectionHashCode( this );??
  20. }??
  21. ??
  22. @Override ??
  23. public ? int ?hashCode()?{??
  24. ???? return ? new ?HashCodeBuilder( this ).append( this .getId())??
  25. ????????????.append( this .getUsername()).hashCode();??
  26. }??
  27. ??
  28. ??
  29. ??
  30. //?EqulasBuilder ??
  31. @Override ??
  32. public ? boolean ?equals(Object?obj)?{??
  33. ???? if ?( this ?==?obj)?{??
  34. ???????? return ? true ;??
  35. ????}??
  36. ???? if ?(obj.getClass()?==?Test. class )?{??
  37. ????????Test?test?=?(Test)?obj;??
  38. ???????? return ? new ?EqualsBuilder().append( this .getId(),?test.getId())??
  39. ????????????????.append( this .getUsername(),?test.getUsername()).isEquals();??
  40. ????}??
  41. ???? return ? false ;??
  42. }??
  43. @Override ??
  44. public ? boolean ?equals(Object?obj)?{??
  45. ???? return ?EqualsBuilder.reflectionEquals( this ,?obj);??
  46. }??
  47. ??
  48. ??
  49. //?CompareToBuilder ??
  50. @Override ??
  51. public ? int ?compareTo(Test?o)?{??
  52. ???? return ?CompareToBuilder.reflectionCompare( this ,?o);??
  53. }??
  54. ??
  55. @Override ??
  56. public ? int ?compareTo(Test?o)?{??
  57. ???? return ? new ?CompareToBuilder().append( this .getId(),?o.getId())??
  58. ????????????.append( this .getUsername(),?o.getUsername()).toComparison();??
  59. }??
Java代碼 ? ? 收藏代碼
  1. //ToStringBuilder ??
  2. @Override ??
  3. public ?String?toString()?{??
  4. ???? return ? new ?ToStringBuilder( this ).append( this .getId())??
  5. ????????????.append( this .getUsername()).toString();??
  6. }??
  7. ??
  8. @Override ??
  9. public ?String?toString()?{??
  10. ???? return ?ToStringBuilder.reflectionToString( this );??
  11. }??
  12. //?以上輸出格式為??Test@1270b73[<null>,<null>] ??
  13. ??
  14. ??
  15. ??
  16. //?HashCodeBuilder ??
  17. @Override ??
  18. public ? int ?hashCode()?{??
  19. ???? return ?HashCodeBuilder.reflectionHashCode( this );??
  20. }??
  21. ??
  22. @Override ??
  23. public ? int ?hashCode()?{??
  24. ???? return ? new ?HashCodeBuilder( this ).append( this .getId())??
  25. ????????????.append( this .getUsername()).hashCode();??
  26. }??
  27. ??
  28. ??
  29. ??
  30. //?EqulasBuilder ??
  31. @Override ??
  32. public ? boolean ?equals(Object?obj)?{??
  33. ???? if ?( this ?==?obj)?{??
  34. ???????? return ? true ;??
  35. ????}??
  36. ???? if ?(obj.getClass()?==?Test. class )?{??
  37. ????????Test?test?=?(Test)?obj;??
  38. ???????? return ? new ?EqualsBuilder().append( this .getId(),?test.getId())??
  39. ????????????????.append( this .getUsername(),?test.getUsername()).isEquals();??
  40. ????}??
  41. ???? return ? false ;??
  42. }??
  43. @Override ??
  44. public ? boolean ?equals(Object?obj)?{??
  45. ???? return ?EqualsBuilder.reflectionEquals( this ,?obj);??
  46. }??
  47. ??
  48. ??
  49. //?CompareToBuilder ??
  50. @Override ??
  51. public ? int ?compareTo(Test?o)?{??
  52. ???? return ?CompareToBuilder.reflectionCompare( this ,?o);??
  53. }??
  54. ??
  55. @Override ??
  56. public ? int ?compareTo(Test?o)?{??
  57. ???? return ? new ?CompareToBuilder().append( this .getId(),?o.getId())??
  58. ????????????.append( this .getUsername(),?o.getUsername()).toComparison();??
  59. }??



????? 使用commons能最大程度的簡化代碼,實(shí)現(xiàn)one-line編程,注意使用反射形式的時(shí)候,static和transient不會參與比較或輸出,要特別注意 ?


????? 有些情況下,Arrays滿足不到你對數(shù)組的操作?不要緊,ArrayUtils幫你 ?

????? ArrayUtils ?

Java代碼 ? ?
  1. public ? class ?TestMain?{??
  2. ??
  3. ???? public ? static ? void ?main(String[]?args)?{??
  4. ???????? int []?nums1?=?{? 1 ,? 2 ,? 3 ,? 4 ,? 5 ,? 6 ?};??
  5. ???????? //?通過常量創(chuàng)建新數(shù)組 ??
  6. ???????? int []?nums2?=?ArrayUtils.EMPTY_INT_ARRAY;??
  7. ??
  8. ???????? //?比較兩個(gè)數(shù)組是否相等 ??
  9. ????????ArrayUtils.isEquals(nums1,?nums2);??
  10. ??
  11. ???????? //?輸出數(shù)組,第二參數(shù)為數(shù)組為空時(shí)代替輸出 ??
  12. ????????ArrayUtils.toString(nums1,? "array?is?null" );??
  13. ??
  14. ???????? //?克隆新數(shù)組,注意此拷貝為深拷貝 ??
  15. ???????? int []?nums3?=?ArrayUtils.clone(nums1);??
  16. ??
  17. ???????? //?截取數(shù)組 ??
  18. ????????ArrayUtils.subarray(nums1,? 1 ,? 2 );??
  19. ??
  20. ???????? //?判斷兩個(gè)數(shù)組長度是否相等 ??
  21. ????????ArrayUtils.isSameLength(nums1,?nums2);??
  22. ??
  23. ???????? //?判斷兩個(gè)數(shù)組類型是否相等,注意int和Integer比較時(shí)不相等 ??
  24. ????????ArrayUtils.isSameType(nums1,?nums2);??
  25. ??
  26. ???????? //?反轉(zhuǎn)數(shù)組 ??
  27. ????????ArrayUtils.reverse(nums1);??
  28. ??
  29. ???????? //?查找數(shù)組元素位置 ??
  30. ????????ArrayUtils.indexOf(nums1,? 5 );??
  31. ??
  32. ???????? //?查找數(shù)組元素最后出現(xiàn)位置 ??
  33. ????????ArrayUtils.lastIndexOf(nums1,? 4 );??
  34. ??
  35. ???????? //?查找元素是否存在數(shù)組中 ??
  36. ????????ArrayUtils.contains(nums1,? 2 );??
  37. ??
  38. ???????? //?將基本數(shù)組類型轉(zhuǎn)為包裝類型 ??
  39. ????????Integer[]?nums4?=?ArrayUtils.toObject(nums1);??
  40. ??
  41. ???????? //?判斷是否為空,length=0或null都屬于 ??
  42. ????????ArrayUtils.isEmpty(nums1);??
  43. ??
  44. ???????? //?并集操作,合并數(shù)組 ??
  45. ????????ArrayUtils.addAll(nums1,?nums2);??
  46. ??
  47. ???????? //?增加元素,在下標(biāo)5中插入10,注意此處返回是新數(shù)組 ??
  48. ????????ArrayUtils.add(nums1,? 5 ,? 1111 );??
  49. ??
  50. ???????? //?刪除指定位置元素,注意返回新數(shù)組,刪除元素后面的元素會前移,保持?jǐn)?shù)組有序 ??
  51. ????????ArrayUtils.remove(nums1,? 5 );??
  52. ??
  53. ???????? //?刪除數(shù)組中值為10的元素,以值計(jì)算不以下標(biāo) ??
  54. ????????ArrayUtils.removeElement(nums1,? 10 );??
  55. ????}??
  56. }??
Java代碼 ? ? 收藏代碼
  1. public ? class ?TestMain?{??
  2. ??
  3. ???? public ? static ? void ?main(String[]?args)?{??
  4. ???????? int []?nums1?=?{? 1 ,? 2 ,? 3 ,? 4 ,? 5 ,? 6 ?};??
  5. ???????? //?通過常量創(chuàng)建新數(shù)組 ??
  6. ???????? int []?nums2?=?ArrayUtils.EMPTY_INT_ARRAY;??
  7. ??
  8. ???????? //?比較兩個(gè)數(shù)組是否相等 ??
  9. ????????ArrayUtils.isEquals(nums1,?nums2);??
  10. ??
  11. ???????? //?輸出數(shù)組,第二參數(shù)為數(shù)組為空時(shí)代替輸出 ??
  12. ????????ArrayUtils.toString(nums1,? "array?is?null" );??
  13. ??
  14. ???????? //?克隆新數(shù)組,注意此拷貝為深拷貝 ??
  15. ???????? int []?nums3?=?ArrayUtils.clone(nums1);??
  16. ??
  17. ???????? //?截取數(shù)組 ??
  18. ????????ArrayUtils.subarray(nums1,? 1 ,? 2 );??
  19. ??
  20. ???????? //?判斷兩個(gè)數(shù)組長度是否相等 ??
  21. ????????ArrayUtils.isSameLength(nums1,?nums2);??
  22. ??
  23. ???????? //?判斷兩個(gè)數(shù)組類型是否相等,注意int和Integer比較時(shí)不相等 ??
  24. ????????ArrayUtils.isSameType(nums1,?nums2);??
  25. ??
  26. ???????? //?反轉(zhuǎn)數(shù)組 ??
  27. ????????ArrayUtils.reverse(nums1);??
  28. ??
  29. ???????? //?查找數(shù)組元素位置 ??
  30. ????????ArrayUtils.indexOf(nums1,? 5 );??
  31. ??
  32. ???????? //?查找數(shù)組元素最后出現(xiàn)位置 ??
  33. ????????ArrayUtils.lastIndexOf(nums1,? 4 );??
  34. ??
  35. ???????? //?查找元素是否存在數(shù)組中 ??
  36. ????????ArrayUtils.contains(nums1,? 2 );??
  37. ??
  38. ???????? //?將基本數(shù)組類型轉(zhuǎn)為包裝類型 ??
  39. ????????Integer[]?nums4?=?ArrayUtils.toObject(nums1);??
  40. ??
  41. ???????? //?判斷是否為空,length=0或null都屬于 ??
  42. ????????ArrayUtils.isEmpty(nums1);??
  43. ??
  44. ???????? //?并集操作,合并數(shù)組 ??
  45. ????????ArrayUtils.addAll(nums1,?nums2);??
  46. ??
  47. ???????? //?增加元素,在下標(biāo)5中插入10,注意此處返回是新數(shù)組 ??
  48. ????????ArrayUtils.add(nums1,? 5 ,? 1111 );??
  49. ??
  50. ???????? //?刪除指定位置元素,注意返回新數(shù)組,刪除元素后面的元素會前移,保持?jǐn)?shù)組有序 ??
  51. ????????ArrayUtils.remove(nums1,? 5 );??
  52. ??
  53. ???????? //?刪除數(shù)組中值為10的元素,以值計(jì)算不以下標(biāo) ??
  54. ????????ArrayUtils.removeElement(nums1,? 10 );??
  55. ????}??
  56. }??



????? 還在使用傳統(tǒng)反射嗎?還在被反射的樣板代碼困擾?看commons如何幫助我們簡化反射的工作,從樣板代碼抽身 ?

????? ClassUtils ?

Java代碼 ? ?
  1. public ? class ?TestMain?{??
  2. ??
  3. ???? public ? static ? void ?main(String[]?args)?{??
  4. ???????? //?獲取Test類所有實(shí)現(xiàn)的接口 ??
  5. ????????ClassUtils.getAllInterfaces(Test. class );??
  6. ??
  7. ???????? //?獲取Test類所有父類 ??
  8. ????????ClassUtils.getAllSuperclasses(Test. class );??
  9. ??
  10. ???????? //?獲取Test類所在的包名 ??
  11. ????????ClassUtils.getPackageName(Test. class );??
  12. ??
  13. ???????? //?獲取Test類簡單類名 ??
  14. ????????ClassUtils.getShortClassName(Test. class );??
  15. ??
  16. ???????? //?判斷是否可以轉(zhuǎn)型 ??
  17. ????????ClassUtils.isAssignable(Test. class ,?Object. class );??
  18. ??
  19. ???????? //?判斷是否有內(nèi)部類 ??
  20. ????????ClassUtils.isInnerClass(Test. class );??
  21. ??
  22. ????}??
  23. }??
Java代碼 ? ? 收藏代碼
  1. public ? class ?TestMain?{??
  2. ??
  3. ???? public ? static ? void ?main(String[]?args)?{??
  4. ???????? //?獲取Test類所有實(shí)現(xiàn)的接口 ??
  5. ????????ClassUtils.getAllInterfaces(Test. class );??
  6. ??
  7. ???????? //?獲取Test類所有父類 ??
  8. ????????ClassUtils.getAllSuperclasses(Test. class );??
  9. ??
  10. ???????? //?獲取Test類所在的包名 ??
  11. ????????ClassUtils.getPackageName(Test. class );??
  12. ??
  13. ???????? //?獲取Test類簡單類名 ??
  14. ????????ClassUtils.getShortClassName(Test. class );??
  15. ??
  16. ???????? //?判斷是否可以轉(zhuǎn)型 ??
  17. ????????ClassUtils.isAssignable(Test. class ,?Object. class );??
  18. ??
  19. ???????? //?判斷是否有內(nèi)部類 ??
  20. ????????ClassUtils.isInnerClass(Test. class );??
  21. ??
  22. ????}??
  23. }??



????? ConstructorUtils ?

Java代碼 ? ?
  1. public ? class ?TestMain?{??
  2. ??
  3. ???? public ? static ? void ?main(String[]?args)?{??
  4. ??
  5. ???????? //?獲取參數(shù)為String的構(gòu)造函數(shù) ??
  6. ????????ConstructorUtils.getAccessibleConstructor(Test. class ,?String. class );??
  7. ??
  8. ???????? //?執(zhí)行參數(shù)為String的構(gòu)造函數(shù) ??
  9. ????????Test?test?=?(Test)?ConstructorUtils.invokeConstructor(Test. class ,??
  10. ???????????????? "Hello" );??
  11. ????}??
  12. }??
Java代碼 ? ? 收藏代碼
  1. public ? class ?TestMain?{??
  2. ??
  3. ???? public ? static ? void ?main(String[]?args)?{??
  4. ??
  5. ???????? //?獲取參數(shù)為String的構(gòu)造函數(shù) ??
  6. ????????ConstructorUtils.getAccessibleConstructor(Test. class ,?String. class );??
  7. ??
  8. ???????? //?執(zhí)行參數(shù)為String的構(gòu)造函數(shù) ??
  9. ????????Test?test?=?(Test)?ConstructorUtils.invokeConstructor(Test. class ,??
  10. ???????????????? "Hello" );??
  11. ????}??
  12. }??



????? MethodUtils ?

Java代碼 ? ?
  1. public ? static ? void ?main(String[]?args)? throws ?NoSuchMethodException,??
  2. ????????????IllegalAccessException,?InvocationTargetException?{??
  3. ???????? //?調(diào)用無參方法 ??
  4. ????????Test?test?=? new ?Test();??
  5. ????????MethodUtils.invokeMethod(test,? "publicHello" ,? null );??
  6. ??
  7. ???????? //?調(diào)用一參方法 ??
  8. ????????MethodUtils.invokeMethod(test,? "publicHello" ,? "Hello" );??
  9. ??
  10. ???????? //?調(diào)用多參方法 ??
  11. ????????MethodUtils.invokeMethod(test,? "publicHello" ,? new ?Object[]?{? "100" ,??
  12. ???????????????? new ?Integer( 10 )?});??
  13. ??
  14. ???????? //?調(diào)用靜態(tài)方法 ??
  15. ????????MethodUtils.invokeStaticMethod(Test. class ,? "staticHello" ,? null );??
  16. ????}??
Java代碼 ? ? 收藏代碼
  1. public ? static ? void ?main(String[]?args)? throws ?NoSuchMethodException,??
  2. ????????????IllegalAccessException,?InvocationTargetException?{??
  3. ???????? //?調(diào)用無參方法 ??
  4. ????????Test?test?=? new ?Test();??
  5. ????????MethodUtils.invokeMethod(test,? "publicHello" ,? null );??
  6. ??
  7. ???????? //?調(diào)用一參方法 ??
  8. ????????MethodUtils.invokeMethod(test,? "publicHello" ,? "Hello" );??
  9. ??
  10. ???????? //?調(diào)用多參方法 ??
  11. ????????MethodUtils.invokeMethod(test,? "publicHello" ,? new ?Object[]?{? "100" ,??
  12. ???????????????? new ?Integer( 10 )?});??
  13. ??
  14. ???????? //?調(diào)用靜態(tài)方法 ??
  15. ????????MethodUtils.invokeStaticMethod(Test. class ,? "staticHello" ,? null );??
  16. ????}??



????? FieldUtils ?

Java代碼 ? ?
  1. public ? class ?TestMain?{??
  2. ??
  3. ???? public ? static ? void ?main(String[]?args)? throws ?IllegalAccessException?{??
  4. ????????Test?test?=? new ?Test( "1" ,? "Ray" ,? "hello" );??
  5. ??
  6. ???????? //?以下兩個(gè)方法完全一樣,都能獲取共有或私有變量,因?yàn)榈谌齻€(gè)參數(shù)都設(shè)置了不檢查 ??
  7. ????????FieldUtils.getDeclaredField(Test. class ,? "username" ,? true );??
  8. ????????FieldUtils.getField(Test. class ,? "username" ,? true );??
  9. ??
  10. ???????? //?讀取私有或公共變量的值 ??
  11. ????????FieldUtils.readField(test,? "username" ,? true );??
  12. ??
  13. ???????? //?讀取靜態(tài)變量 ??
  14. ????????FieldUtils.readStaticField(Test. class ,? "STATIC_FIELD" );??
  15. ??
  16. ???????? //?寫入私有或共有變量 ??
  17. ????????FieldUtils.writeField(test,? "username" ,? "RayRay" ,? true );??
  18. ??
  19. ???????? //?寫入靜態(tài)變量 ??
  20. ????????FieldUtils.writeStaticField(Test. class ,? "STATIC_FIELD" ,? "static_value" );??
  21. ????}??
  22. }??
Java代碼 ? ? 收藏代碼
  1. public ? class ?TestMain?{??
  2. ??
  3. ???? public ? static ? void ?main(String[]?args)? throws ?IllegalAccessException?{??
  4. ????????Test?test?=? new ?Test( "1" ,? "Ray" ,? "hello" );??
  5. ??
  6. ???????? //?以下兩個(gè)方法完全一樣,都能獲取共有或私有變量,因?yàn)榈谌齻€(gè)參數(shù)都設(shè)置了不檢查 ??
  7. ????????FieldUtils.getDeclaredField(Test. class ,? "username" ,? true );??
  8. ????????FieldUtils.getField(Test. class ,? "username" ,? true );??
  9. ??
  10. ???????? //?讀取私有或公共變量的值 ??
  11. ????????FieldUtils.readField(test,? "username" ,? true );??
  12. ??
  13. ???????? //?讀取靜態(tài)變量 ??
  14. ????????FieldUtils.readStaticField(Test. class ,? "STATIC_FIELD" );??
  15. ??
  16. ???????? //?寫入私有或共有變量 ??
  17. ????????FieldUtils.writeField(test,? "username" ,? "RayRay" ,? true );??
  18. ??
  19. ???????? //?寫入靜態(tài)變量 ??
  20. ????????FieldUtils.writeStaticField(Test. class ,? "STATIC_FIELD" ,? "static_value" );??
  21. ????}??
  22. }??



????? 讀者在使用時(shí)可能會發(fā)現(xiàn),MethodUtils和ConstructUtils在org.apache.commons.lang.reflect和org.apache.commons.beanutils都存在,但FieldUtils和ClassUtils只在reflect當(dāng)中存在,因?yàn)閎eanutils提供了另外一種名為PropertyUtils的對屬性存取更為方便的工具,但PropertyUtils不能獲取傳統(tǒng)反射的Field對象,筆者建議MethodUtils和ConstructUtils應(yīng)該傾向使用beanutils,因?yàn)閎eanutils就是為反射而存在,更專業(yè)(雖然提供的方法幾乎一樣),而使用ClassUtils和要獲取傳統(tǒng)的Field對象時(shí)使用reflect中的FieldUtils ?


總結(jié): ?
????? commons工具包很多開源組織都有提供,例如google,spring,apache都有各自的工具包,有眾多的選擇,但最終的目的只是為了方便我們程序的開發(fā)和維護(hù),簡化我們編寫一些常用的邏輯,提升我們開發(fā)的效率,從而達(dá)到活在開源,善用開源

開源工具 — Apache Commons Lang(1)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日韩女同一区二区三区 | 亚洲精品日本高清中文字幕 | 精品久久久久久久久久久久久久 | 日韩在线精品视频 | 大插香蕉 | 男女xx00xx的视频免费观看 | 国产精品毛片久久久久久 | 奇米影视首页 | 人人性人人性碰国产 | 亚洲国产aⅴ成人精品无吗 最新国产网址 | 久久这里只有精品99 | 亚洲欧美国产高清 | 日韩视频在线免费观看 | 男女在线网站 | 婷婷丁香社区 | 欧美日韩中文视频 | 九色福利 | 久久y | 欧美日韩一区二区综合在线视频 | 国产伦精品一区二区 | 国产精品免费av | 久热免费 | 亚洲国产精品视频 | 欧美三级成版人版在线观看 | 久久久精品中文字幕 | 成人久久久| 亚洲 欧美 日韩 在线 | 男女xx | 天天操天天干天天爽 | 久久99国产精一区二区三区 | 色综合久久天天综合绕观看 | 国产一级毛片午夜福 | 欧美一级电影在线播放 | 午夜寂寞影院在线观看 | 精品国产一区探花在线观看 | 久久夜视频 | 久久www免费人成看片高清 | 日日日bbb| 免费高清成人 | 亚洲精品一区在线观看 | 国产日韩精品一区 |