溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android代碼規(guī)范

發(fā)布時(shí)間:2020-09-29 03:22:36 來(lái)源:網(wǎng)絡(luò) 閱讀:275 作者:楊光成 欄目:移動(dòng)開發(fā)

Android代碼規(guī)范  ——轉(zhuǎn)發(fā)請(qǐng)表明出處《IT藍(lán)豹》:http://itlanbao.com/preview.aspx#1,0


[-]

  1. 一Import的次序

  2. 二縮進(jìn)Indentation

    1. 總則

    2. 示例代碼

    3. 規(guī)則說明

  3. 三大括號(hào)Braces的位置

    1.  

    2. 示例代碼

    3. 規(guī)則說明

  4. 四空格White Space

    1. 聲明

    2. 申請(qǐng)

    3. 初始化體

    4. 數(shù)組元素的訪問

    5. 函數(shù)調(diào)用

    6. 賦值

    7. 操作數(shù)

    8. 加括號(hào)的表達(dá)式

    9. 類型轉(zhuǎn)換

    10. 三元條件表達(dá)式

    11. 程序塊

    12. if else語(yǔ)句

    13. for語(yǔ)句

    14. switch語(yǔ)句

    15. while和dowhile語(yǔ)句

    16. 同步synchronized語(yǔ)句

    17. catch語(yǔ)句

    18. assert語(yǔ)句

    19. return語(yǔ)句

    20. throw語(yǔ)句

    21. 臨時(shí)變量

    22. 構(gòu)造體

    23. 方法

    24. 標(biāo)號(hào)

    25. 注解Annotation

    26. 枚舉Enumtypes

    27. 注解類型Annotationtypes

    28. 聲明

    29. 控制語(yǔ)句

    30. 表達(dá)式

    31. 數(shù)組

    32. 泛型

  5. 五空白行BlankLines

    1. 示例代碼

    2. 規(guī)則說明

    3. 七控制語(yǔ)句ControlStatements

    4. 八換行LineWrapping

    5. 九注釋Comments

    6. 十Android中XML文件的格式化

    7. 總結(jié)

    8. 插入新行

    9. 數(shù)組初始化

    10. 空的語(yǔ)句

    11. 注解

    12. 示例代碼

    13. 規(guī)則說明

    14. 總則

    15. 注解Annotation

    16. 類聲明

    17. 構(gòu)造體聲明

    18. 方法聲明

    19. 枚舉聲明

    20. 函數(shù)調(diào)用

    21. 表達(dá)式

    22. 語(yǔ)句

    23. 編譯單元之間的空白行

    24. 類內(nèi)部的空白行

    25. 示例代碼

    26. 規(guī)則說明

    27. 六插入新行NewLines

 

Google對(duì)Android的編程規(guī)范在Code Style Guidelines for Contributors中做了描述,并在Android源碼中release了import和Java的配置文件android.importorder與android-formatting.xml。本文分析這些配置文件在Eclipse環(huán)境下格式化Android編碼規(guī)范都做了什么,在Java和XML文件中如何具體體現(xiàn)。

Android源碼目錄<android_src_root>/development/ide/eclipse/下有文件android.importorder和android-formatting.xml,可以在Eclipse中導(dǎo)入import次序及Java編碼風(fēng)格:

1)?????打開Window > Preferences > Java > Code Style;

2)?????在Organizer Imports中點(diǎn)擊Imports,選擇android.importorder導(dǎo)入;

3)?????在Formatter中點(diǎn)擊Imports,選擇android-formatting.xml導(dǎo)入。

下面講解這些配置都做了什么,在代碼中如何具體體現(xiàn)的。

一、Import的次序

Google推薦的AndroidJava文件開頭import的次序(按照先后)是:

  1. com

  2. org

  3. android

  4. java

  5. javax

排列原則:

 

  • ?這個(gè)次序也是根據(jù)看import語(yǔ)句的重要性來(lái)排定的:首先希望看到用了android里的哪些類;然后是其他第三方的;最后才關(guān)注標(biāo)準(zhǔn)Java庫(kù)里的。

  • ?不同的import分組之間是有一個(gè)空白行,在5.2.1?4)中描述。

  • ?同一import分組內(nèi)部按照字母次序排列。

 

二、縮進(jìn)(Indentation)

2.1 總則

縮進(jìn)只用空格,不用制表符(TAB)??s進(jìn)用4個(gè)空格,按下TAB鍵用4個(gè)空格代替。

?

2.2 示例代碼

?

[java]?view plaincopy

  1. /**?

  2. ?*?Indentation?

  3. ?*/??

  4. class?Example?{??

  5. ????int[]?myArray?=?{??

  6. ????????????1,?2,?3,?4,?5,?6??

  7. ????};??

  8. ???

  9. ????int?theInt?=?1;??

  10. ???

  11. ????String?someString?=?"Hello";??

  12. ???

  13. ????double?aDouble?=?3.0;??

  14. ???

  15. ????void?foo(int?a,?int?b,?int?c,?int?d,?int?e,?int?f)?{??

  16. ????????switch?(a)?{??

  17. ????????????case?0:??

  18. ????????????????Other.doFoo();??

  19. ????????????????break;??

  20. ????????????default:??

  21. ????????????????Other.doBaz();??

  22. ????????}??

  23. ????}??

  24. ???

  25. ????void?bar(List?v)?{??

  26. ????????for?(int?i?=?0;?i?<10;?i++)?{??

  27. ????????????v.add(new?Integer(i));??

  28. ????????}??

  29. ????}??

  30. }??

  31. ???

  32. enum?MyEnum?{??

  33. ????UNDEFINED(0)?{??

  34. ????????void?foo()?{??

  35. ????????}??

  36. ????}??

  37. }??

  38. ???

  39. @interface?MyAnnotation?{??

  40. ????int?count()?default?1;??

  41. }??

  42. ???

 

2.3 規(guī)則說明

 

1)????? 域不用對(duì)齊

? ? ? ??若對(duì)齊的話,則myArray,theInt, someString和aDouble都在同一列上對(duì)齊。

2)?????類體內(nèi)部的聲明全都縮進(jìn)

? ? ? ??Class Example內(nèi)的定義[#5 ~ #29]相對(duì)class?Example[#4]都有縮進(jìn)

3)?????枚舉的聲明要縮進(jìn)

? ? ? ??UNDEFINED(0) [#33]前面有縮進(jìn)

4)?????枚舉內(nèi)的常量要縮進(jìn)

? ? ? ??void?foo() [#34]前面有縮進(jìn)

5)?注解的聲明要縮進(jìn)

? ? ? ??int?count()[#39]前面有縮進(jìn)

6)?????方法/構(gòu)造體內(nèi)的語(yǔ)句要縮進(jìn)

? ? ? ??方法foo和bar內(nèi)的語(yǔ)句[#16 ~ #22, #26 ~ #28]都有縮進(jìn)

7)?????程序塊內(nèi)的語(yǔ)句要縮進(jìn)

? ? ? ??for循環(huán)內(nèi)的v.add(new?Integer(i))[#27]有縮進(jìn)

8)?????switch內(nèi)的語(yǔ)句要縮進(jìn)

? ? ? ? switch內(nèi)的語(yǔ)句[#17 ~ #21]相對(duì)switch有縮進(jìn)

9)?????case內(nèi)的語(yǔ)句要縮進(jìn)

? ? ? ??Other.doFoo()[#18]相對(duì)于case;Other.doBaz()[#21]相對(duì)于default都有縮進(jìn)

10)??break語(yǔ)句要縮進(jìn)

? ? ? ??break[#19]相對(duì)于case有縮進(jìn)

11)??空白行不用縮進(jìn)

? ? ? ??域和方法之間的空白行[#8, #10, #12, #14, #24]是沒有縮進(jìn)的

三、大括號(hào)(Braces)的位置

 

3.1 示例代碼

[java]?view plaincopy

  1. /**?

  2. ?*?Braces?

  3. ?*/??

  4. interface?Empty?{??

  5. }??

  6. ???

  7. enum?MyEnum?{??

  8. ????UNDEFINED(0)?{??

  9. ????????void?foo()?{??

  10. ????????}??

  11. ????}??

  12. }??

  13. ???

  14. @interfaceSomeAnnotationType?{??

  15. }??

  16. ???

  17. class?Example?{??

  18. ????SomeClass?fField?=?new?SomeClass()?{??

  19. ????};??

  20. ???

  21. ????int[]?myArray?=?{??

  22. ????????????1,?2,?3,?4,?5,?6??

  23. ????};??

  24. ???

  25. ????int[]?emptyArray?=?new?int[]?{};??

  26. ???

  27. ????Example()?{??

  28. ????}??

  29. ???

  30. ????void?bar(int?p)?{??

  31. ????????for?(int?i?=?0;?i?<10;?i++)?{??

  32. ????????}??

  33. ????????switch?(p)?{??

  34. ????????????case?0:??

  35. ????????????????fField.set(0);??

  36. ????????????????break;??

  37. ????????????case?1:?{??

  38. ????????????????break;??

  39. ????????????}??

  40. ????????????default:??

  41. ????????????????fField.reset();??

  42. ????????}??

  43. ????}??

  44. }??

  45. ???


?

3.2? 規(guī)則說明

1)類或接口的聲明跟左大括號(hào)在同一行上

#4 Empty以及 #17 Example后面{的位置

2)?????匿名類的聲明跟左大括號(hào)在同一行上

? ? ? ??#18 SomeClass后面{的位置

3)?????構(gòu)造體的聲明跟左大括號(hào)在同一行上

? ? ? ??#27 Example()后面{的位置

4)?????方法的聲明跟左大括號(hào)在同一行上

? ? ? ??#9 foo和#30 bar后面{的位置

5)?????枚舉的聲明跟左大括號(hào)在同一行上

? ? ? ??#7 MyEnum 后面{的位置

6)?????枚舉常量體跟左大括號(hào)在同一行上

? ? ? ??#8 UNDEFINED(0) 后面{的位置

7)?????注解類型的聲明跟左大括號(hào)在同一行上

? ? ? ??#14 SomeAnnotationType后面{的位置

8)?????程序塊跟左大括號(hào)在同一行上

? ? ? ??#31 for后面{的位置

9)?????case語(yǔ)句中的程序塊跟左大括號(hào)在同一行上

? ? ? ??#37 case 1后面{的位置

10)??switch語(yǔ)句跟左大括號(hào)在同一行上

? ? ? ??#33 switch后面{的位置

11)??數(shù)組的初始化常量跟左大括號(hào)在同一行上

? ? ? ? #21和#25 {的位置

?

?

四、空格(White Space)

?

4.1 聲明

?

4.1.1 類

?

[java]?view plaincopy

  1. class?MyClass?implements?I0,?I1,?I2?{??

  2. }??

  3. ???

  4. AnonClass?=?new?AnonClass()?{??

  5. ????void?foo(Some?s)?{??

  6. ????}??

  7. };??

·????????類的左大括號(hào)的前面加空格;

·????????匿名類的左大括號(hào)的前面加空格;

·????????implements語(yǔ)句中逗號(hào)的前面,不加空格;

·????????implements語(yǔ)句中逗號(hào)的后面,加上空格;

?

4.1.2 域

?

[java]?view plaincopy

  1. int?a?=?0,?b?=?1,?c=?2,?d?=?3;??

?

·????????多個(gè)域聲明中逗號(hào)的前面,不加空格;

·????????多個(gè)域聲明中逗號(hào)的后面,加上空格。

?

4.1.3 臨時(shí)變量

?

[java]?view plaincopy

  1. int?a?=?0,?b?=?1,?c=?2,?d?=?3;??

?

·????????多個(gè)臨時(shí)變量聲明中逗號(hào)的前面,不加空格;

·????????多個(gè)臨時(shí)變量聲明中逗號(hào)的后面,加上空格;

?

4.1.4 構(gòu)造體

[java]?view plaincopy

  1. MyClass()?throws?E0,?E1?{??

  2. ????this(0,?0,?0);??

  3. }??

  4. ???

  5. MyClass(int?x,?int?y,?int?z)?throws?E0,?E1?{??

  6. ????super(x,?y,?z,?true);??

  7. }??


·????????左小括號(hào)的前面,不加空格;

·????????左小括號(hào)的后面,不加空格;

·????????右小括號(hào)的前面,不加空格;

·????????小括號(hào)內(nèi)為空,則它們之間不加空格;

·????????左大括號(hào)前面,加上空格;

·????????參數(shù)列表中逗號(hào)之前,不加空格;

·????????參數(shù)列表中逗號(hào)之后,加上空格;

·????????throws語(yǔ)句中逗號(hào)之前,不加空格;

·????????throws語(yǔ)句中逗號(hào)之后,加上空格。

?

4.1.5 方法

?

[java]?view plaincopy

  1. void?foo()?throws?E0,?E1?{??

  2. };??

  3. ???

  4. void?bar(int?x,?int?y)?throws?E0,?E1?{??

  5. }??

  6. ???

  7. void?format(Strings,?Object...?args)?{??

  8. }??

·????????左小括號(hào)的前面,不加空格;

·????????左小括號(hào)的后面,不加空格;

·????????右小括號(hào)的前面,不加空格;

·????????小括號(hào)內(nèi)為空,則它們之間不加空格;

·????????左大括號(hào)前面,加上空格;

·????????參數(shù)列表中逗號(hào)之前,不加空格;

·????????參數(shù)列表中逗號(hào)之后,加上空格;

·????????可變參數(shù)列表省略號(hào)之前,不加空格;

·????????可變參數(shù)列表省略號(hào)之后,加上空格;

·????????throws語(yǔ)句中逗號(hào)之前,不加空格;

·????????throws語(yǔ)句中逗號(hào)之后,加上空格。

?

4.1.6 標(biāo)號(hào)

?

[java]?view plaincopy

  1. label:?for?(int?i?=?0;?i?<?list.length;?i++)?{??

  2. ????for?(int?j?=?0;?j?<?list[i].length;?j++)??

  3. ????????continue?label;??

  4. }??

·????????冒號(hào)之前,不加空格;

·????????冒號(hào)之后,加上空格

?

4.1.7 注解/Annotation

?

[java]?view plaincopy

  1. @Annot(x?=?23,?y?=?-3)??

  2. public?class?A?{??

  3. }??

·????????‘@’之后,不加空格;

·????????左小括號(hào)的前面,不加空格;

·????????左小括號(hào)的后面,不加空格;

·????????逗號(hào)前面,不加空格;

·????????逗號(hào)后面,加上空格;

·????????右小括號(hào)的前面,不加空格

?

4.1.8 枚舉/Enumtypes

?

[java]?view plaincopy

  1. enum?MyEnum?{??

  2. ????GREEN(0,?1),?RED()?{??

  3. ????????void?process()?{??

  4. ????????}??

  5. ????}??

  6. }??

·????????聲明中左大括號(hào)的前面[#1],加上空格;

·????????常量之間的逗號(hào)[#2 RED前]前面,不加空格;

·????????常量之間的逗號(hào)[#2 RED前]后面,加上空格;

·????????常量參數(shù)的左小括號(hào)[#2 GREEN后]前面,不加空格;

·????????常量參數(shù)的左小括號(hào)[#2 GREEN后]后面,不加空格;

·????????常量參數(shù)的小括號(hào)[#2 RED后]中間為空,括號(hào)之間不加空格;

·????????常量參數(shù)之間的逗號(hào)[#2 GREEN()里面]前面,不加空格;

·????????常量參數(shù)之間的逗號(hào)[#2 GREEN()里面]后面,加上空格;

·????????常量參數(shù)的右小括號(hào)[#2 GREEN()后]前面,不加空格;

·????????常量體左大括號(hào)[#2 RED后]前面,加上空格。

?

4.1.9 注解類型/Annotationtypes

?

[java]?view plaincopy

  1. @interface?MyAnnotation?{??

  2. ????String?value();??

  3. }??

  4. ???

  5. @interface?OtherAnnotation?{??

  6. }??

·????????‘@’之前,不加空格;

·????????‘@’之后,不加空格

·????????左大括號(hào)的前面,加上空格;

·????????注解類型成員的左小括號(hào)的前面,不加空格;

·????????注解類型成員的小括號(hào)的之間,不加空格;

?

4.2 控制語(yǔ)句

?

4.2.1 程序塊

?

[java]?view plaincopy

  1. if?(true)?{??

  2. ????return?1;??

  3. }?else?{??

  4. ????return?2;??

  5. }??

·????????左大括號(hào)前面,加上空格;

·????????右大括號(hào)后面,加上空格。

?

4.2.2 if else語(yǔ)句

?

[java]?view plaincopy

  1. if?(condition)?{??

  2. ????return?foo;??

  3. }?else?{??

  4. ????return?bar;??

  5. }??

·????????左小括號(hào)前加上空格;

·????????左小括號(hào)后不加空格;

·????????右小括號(hào)前不加空格【左大括號(hào)前的空格是規(guī)則#4.2.1】

?

4.2.3 for語(yǔ)句

?

[java]?view plaincopy

  1. for?(int?i?=?0,?j?=?array.length;?i?<?array.length;?i++,?j--)?{??

  2. }??

  3. for?(String?s?:?names)?{??

  4. }??

·????????左小括號(hào)前加上空格;

·????????左小括號(hào)后不加空格;

·????????右小括號(hào)前不加空格【左大括號(hào)前的空格是規(guī)則#4.2.1】

·????????初始化語(yǔ)句的逗號(hào)前不加空格;

·????????初始化語(yǔ)句的逗號(hào)后加上空格

·????????增量語(yǔ)句的逗號(hào)前不加空格;

·????????增量語(yǔ)句的逗號(hào)后加上空格

·????????語(yǔ)句之間的分號(hào)前不加空格;

·????????語(yǔ)句之間的分號(hào)后加上空格;

·????????冒號(hào)前面加上空格;

·????????冒號(hào)后面加上空格。

?

4.2.4 switch語(yǔ)句

?

[java]?view plaincopy

  1. switch?(number)?{??

  2. ????case?RED:??

  3. ????????return?GREEN;??

  4. ????case?GREEN:??

  5. ????????return?BLUE;??

  6. ????case?BLUE:??

  7. ????????return?RED;??

  8. ????default:??

  9. ????????return?BLACK;??

  10. }??

· ? ? ? ?case和default的冒號(hào)(‘:’)前不加空格;

·????????左括號(hào)(‘(’)和左大括號(hào)(‘{’)前都加上空格;

·????????左括號(hào)(‘(’)后和右括號(hào)(‘)’)前都不加空格。

?

4.2.5 while和dowhile語(yǔ)句

?

[java]?view plaincopy

  1. while?(condition)?{??

  2. }??

  3. ;??

  4. do?{??

  5. }?while?(condition);??

·????????左括號(hào)前加上空格;

·????????左括號(hào)后不加空格;

·????????右括號(hào)前不加空格【#1左大括號(hào)前的空格是規(guī)則#4.2.1】

?

4.2.6 同步(synchronized)語(yǔ)句

?

[java]?view plaincopy

  1. synchronized?(list)?{??

  2. ????list.add(element);??

  3. }??

·????????左括號(hào)前加上空格;

·????????左括號(hào)后不加空格;

·????????右括號(hào)前不加空格【左大括號(hào)前的空格是規(guī)則#4.2.1】

?

4.2.7 catch語(yǔ)句

?

[java]?view plaincopy

  1. try?{??

  2. ????number?=?Integer.parseInt(value);??

  3. }?catch?(NumberFormatException?e)?{??

  4. }??

·????????左括號(hào)前加上空格;

·????????左括號(hào)后不加空格;

·????????右括號(hào)前不加空格【左大括號(hào)前的空格是規(guī)則#4.2.1】

?

4.2.8 assert語(yǔ)句

?

[java]?view plaincopy

  1. assert?condition?:?reportError();??

?

冒號(hào)前后都加上空格

?

4.2.9 return語(yǔ)句

?

[java]?view plaincopy

  1. return?(o);??

?

括號(hào)表達(dá)式前加上空格

?

4.2.10 throw語(yǔ)句

?

[java]?view plaincopy

  1. throw?(e);??

?

括號(hào)表達(dá)式前加上空格

?

4.3 表達(dá)式

?

4.2.1 函數(shù)調(diào)用

?

[java]?view plaincopy

  1. foo();??

  2. bar(x,?y);??

  3. ???

  4. String?str?=?new?String();??

  5. Point?point?=?new?Point(x,?y);??

  6. ???

  7. MyClass()?throws?E0,?E1?{??

  8. ????this(0,?0,?0);??

  9. }??

  10. ???

  11. MyClass(int?x,?int?y,?int?z)?throws?E0,?E1?{??

  12. ????super(x,?y,?z,?true);??

  13. }??

·????????左括號(hào)的前后都不加空格;

·????????右括號(hào)前不加空格;

·????????空的參數(shù)的左右括號(hào)之間不加空格;

·????????方法調(diào)用時(shí)多個(gè)參數(shù)之間分割的逗號(hào)前面不加空格,逗號(hào)后面加空格;

·????????對(duì)象申請(qǐng)時(shí)多個(gè)參數(shù)之間分割的逗號(hào)前面不加空格,逗號(hào)后面加空格;

·????????顯示調(diào)用構(gòu)造函數(shù)時(shí)多個(gè)參數(shù)之間分割的逗號(hào)前面不加空格,逗號(hào)后面加空格;

?

4.3.2 賦值

?

[java]?view plaincopy

  1. List?list?=?new?ArrayList();??

  2. int?a?=?-4?+?-9;??

  3. b?=?a++?/?--number;??

  4. c?+=?4;??

  5. boolean?value?=?true?&&?false;??

賦值操作(=)前后都加上空格?!咀⒁猓骸?=’是一個(gè)操作數(shù)】

?

4.3.3 操作數(shù)

?

[java]?view plaincopy

  1. List?list?=?new?ArrayList();??

  2. int?a?=?-4?+?-9;??

  3. b?=?a++?/?--number;??

  4. c?+=?4;??

  5. boolean?value?=?true?&&?false;??

·????????二元操作(#2的‘+’;#3的‘/’;#5的‘&&’)前后都加上空格;

·????????一元操作(#2 ‘4’和‘9’前面的‘-’)前后都不加空格【示例中‘-’前的空格不是這個(gè)規(guī)則里的】;

·????????前置操作的(#3的‘--number’)前后都不加空格【示例中‘--’前的空格不是這個(gè)規(guī)則里的】;

·????????后置操作的(#3的‘a(chǎn)++’)前后都不加空格【示例中‘++’后的空格不是這個(gè)規(guī)則里的】。

?

4.3.4 加括號(hào)的表達(dá)式

?

[java]?view plaincopy

  1. result?=?(a?*?(b?+?c?+?d)?*?(e?+?f));??

?

左括號(hào)前,左括號(hào)后和右括號(hào)前都不加空格【示例中左括號(hào)前的空格不是這個(gè)規(guī)則里的】

?

4.3.5 類型轉(zhuǎn)換

?

[java]?view plaincopy

  1. String?s?=?((String)?object);??

?

·????????右括號(hào)后加上空格;

·????????左括號(hào)后和右括號(hào)前都不加空格。

?

4.3.6 三元條件表達(dá)式

?

[java]?view plaincopy

  1. String?value?=?condition???TRUE?:?FALSE;??

?

問號(hào)前,問號(hào)后,冒號(hào)前,冒號(hào)后都要加上空格

?

4.4 數(shù)組

?

?

[java]?view plaincopy

  1. int[]?array0?=?new?int[]?{};??

  2. int[]?array1?=?new?int[]?{??

  3. ????????1,?2,?3??

  4. };??

  5. int[]?array2?=?new?int[3];??

  6. ???

  7. array[i].foo();??

?

4.4.1 聲明

·????????左中括號(hào)前不加空格;

·????????左右中括號(hào)中間不加空格

示例中:arrayX前的‘[]’

?

4.4.2 申請(qǐng)

·????????左中括號(hào)前后都不加空格;

·????????右中括號(hào)前不加空格;

·????????空的左右中括號(hào)中間不加空格;

示例中:等號(hào)‘=’后面的‘[]’

?

4.4.3 初始化體

·????????左大括號(hào)前后都加上空格;

·????????右大括號(hào)前加上空格;

·????????逗號(hào)前不加空格;

·????????逗號(hào)后加上空格;

·????????空的大括號(hào)中間不加空格

?

4.4.4 數(shù)組元素的訪問

·????????左中括號(hào)前后都不加空格;

·????????右中括號(hào)前面不加空格

?

4.5 泛型

?

[java]?view plaincopy

  1. Map<String,?Element>?map?=?newHashMap<String,?Element>();??

  2. ???

  3. x.<String,?Element>?foo();??

  4. ???

  5. classMyGenericType<S,?T?extends?Element?&?List>?{??

  6. }??

  7. ???

  8. Map<X<?>,?Y<??extendsK,???super?V>>?t;??

?

?

五、空白行(BlankLines)

?

5.1 示例代碼

?

[java]?view plaincopy

  1. /**?

  2. ?*?Blank?Lines?

  3. ?*/??

  4. ???

  5. package?foo.bar.baz;??

  6. ???

  7. import?java.util.List;??

  8. import?java.util.Vector;??

  9. ???

  10. import?java.net.Socket;??

  11. ???

  12. public?class?Another?{??

  13. }??

  14. ???

  15. public?class?Example?{??

  16. ????public?static?class?Pair?{??

  17. ????????public?String?first;??

  18. ???

  19. ????????public?String?second;??

  20. ????????//?Between?here...??

  21. ???

  22. ????????//?...and?here?are?10?blank?lines??

  23. ????};??

  24. ???

  25. ????private?LinkedList?fList;??

  26. ???

  27. ????public?int?counter;??

  28. ???

  29. ????publicExample(LinkedList?list)?{??

  30. ????????fList?=?list;??

  31. ????????counter?=?0;??

  32. ????}??

  33. ???

  34. ????public?void?push(Pair?p)?{??

  35. ????????fList.add(p);??

  36. ????????++counter;??

  37. ????}??

  38. ???

  39. ????public?Object?pop()?{??

  40. ????????--counter;??

  41. ????????return?(Pair)fList.getLast();??

  42. ????}??

  43. }??

  44. ???


?

5.2 規(guī)則說明

?

5.2.1 編譯單元之間的空白行

1)?????包聲明之前有一空白行[#4]

2)?????包聲明之后有一空白行[#6]

3)?????import聲明之前有一空白行[#6]

4)?????import各個(gè)分組之間有一空白行[#9]

5)?????import聲明之后有一空白行[#11]

6)?????類聲明之間有一空白行[#14]

?

5.2.2 類內(nèi)部的空白行

1)?????第一個(gè)聲明之間無(wú)空白行[#15 & #16之間]

2)?????相同分類聲明之前有一空白行[#24, #28]

3)?????成員類聲明之前有一空白行

4)?????域聲明之前有一空白行[#18, #24, #26]

5)????? 方法聲明之前有一空白行[#28,#33, #38]??????????

6)????? 方法內(nèi)的開始處沒有空白行[#29和#30之間;#34與#35之間;#39與#40之間]

?

?

六、插入新行(NewLines)

?

6.1 示例代碼

?

[java]?view plaincopy

  1. /**?

  2. ?*?New?Lines?

  3. ?*/??

  4. public?class?Empty?{??

  5. }??

  6. ???

  7. class?Example?{??

  8. ????static?int[]?fArray?=?{??

  9. ????????????1,?2,?3,?4,?5??

  10. ????};??

  11. ???

  12. ????Listener?fListener?=?new?Listener()?{??

  13. ????};??

  14. ???

  15. ????@Deprecated??

  16. ????@Override??

  17. ????public?void?bar(@SuppressWarnings("unused")?int?i)?{??

  18. ????????@SuppressWarnings("unused")??

  19. ????????int?k;??

  20. ????}??

  21. ???

  22. ????void?foo()?{??

  23. ????????;??

  24. ????????;??

  25. ????????label:?do?{??

  26. ????????}?while?(false);??

  27. ????????for?(;;)?{??

  28. ????????}??

  29. ????}??

  30. }??

  31. ???

  32. enum?MyEnum?{??

  33. ????UNDEFINED(0)?{??

  34. ????}??

  35. }??

  36. ???

  37. enum?EmptyEnum?{??

  38. }??

  39. ???

  40. @interface?EmptyAnnotation{??

  41. }??

  42. ???

?

6.2 規(guī)則說明

?

6.2.1 插入新行

1)?????類體內(nèi)為空,插入新行[#5是另起的一行]

2)?????匿名類體內(nèi)為空,插入新行[#13是另起的一行]

3)?????方法內(nèi)為空,插入新行

4)?????空的程序塊,插入新行[#26是另起的一行;#28是另起的一行]

5)?????標(biāo)號(hào)后面不插入新行[#25 do與label在同一行]

6)?????在空的枚舉聲明中,插入新行[#38是另起的一行]

7)?????在空的枚舉常量體中,插入新行[#34是另起的一行]

8)?????在空的注解體中,插入新行[#41是另起的一行]

9)?????在文件結(jié)尾,插入新行[#42是另起的一行]

?

6.2.2 數(shù)組初始化

1)?????數(shù)組初始化體的左大括號(hào)后,插入新行[#9是另起的一行]

2)?????數(shù)組初始化體的右大括號(hào)前,插入新行[#10是另起的一行]

?

6.2.3 空的語(yǔ)句

空的語(yǔ)句放在新行上[#24是另起的一行]

?

6.2.4 注解

1)?????對(duì)成員的注解之后,插入新行[#16 & #17都是另起的一行]

2)?????對(duì)參數(shù)的注解之后,不插入新行[#17 int i與@SuppressWarnings("unused")在同一行]

3)?????對(duì)臨時(shí)變量的注解之后,插入新行[#19是另起的一行]

?

?

七、控制語(yǔ)句(ControlStatements)

?

7.1 示例代碼

?

[java]?view plaincopy

  1. /**?

  2. ?*?If...else?

  3. ?*/??

  4. class?Example?{??

  5. ????void?bar()?{??

  6. ????????do?{??

  7. ????????}?while?(true);??

  8. ????????try?{??

  9. ????????}?catch?(Exception?e)?{??

  10. ????????}?finally?{??

  11. ????????}??

  12. ????}??

  13. ???

  14. ????void?foo2()?{??

  15. ????????if?(true)?{??

  16. ????????????return;??

  17. ????????}??

  18. ????????if?(true)?{??

  19. ????????????return;??

  20. ????????}?else?if?(false)?{??

  21. ????????????return;??

  22. ????????}?else?{??

  23. ????????????return;??

  24. ????????}??

  25. ????}??

  26. ???

  27. ????void?foo(int?state)?{??

  28. ????????if?(true)??

  29. ????????????return;??

  30. ????????if?(true)??

  31. ????????????return;??

  32. ????????else?if?(false)??

  33. ????????????return;??

  34. ????????else??

  35. ????????????return;??

  36. ????}??

  37. }??

  38. ???

?

7.2 規(guī)則說明

?

1)?????if語(yǔ)句的else之前,不插入新行[#20& #22的else與‘}’在同一行]

2)?????try語(yǔ)句的catch之前,不插入新行[#9的catch與‘}’在同一行]

3)?????try語(yǔ)句的finally之前,不插入新行[#10的finally與‘}’在同一行]

4)?????do語(yǔ)句的while之前,不插入新行[#7的while與‘}’在同一行]

5)?????#29的‘then’語(yǔ)句與#28的if在不同行,#31的‘then’語(yǔ)句與#30的if在不同行;

6)?????#35的else語(yǔ)句與#34的else在不同行;

7)?????#20和#32的else if中‘else與‘if’在同一行;

8)?????‘return’或‘throw’語(yǔ)句不需要在一行上[#16與#15在兩行上]

?

?

八、換行(LineWrapping)

?

8.1 總則

  • ?每行最多100個(gè)字符;

  • ?超過100個(gè)字符的行要換行,新行缺省縮進(jìn)2個(gè)縮進(jìn)單位。一個(gè)縮進(jìn)單位是4個(gè)空格,所以這里總共縮進(jìn)8個(gè)空格。

  • ?缺省數(shù)組初始化值缺省縮進(jìn)2個(gè)縮進(jìn)單位。

?

8.2 注解(Annotation)

[java]?view plaincopy

  1. /**?

  2. ?*?Element-value?pairs?

  3. ?*/??

  4. @MyAnnotation(value1?=?"this?isan?example",?value2?=?"of?an?annotation",?value3?=?"withseveral?arguments",?value4?=?"by?Haili?TIAN?(haili.tian@gmail.com)")??

  5. class?Example?{??

  6. }??

注解不換行:value1、value2、value3和value4都在同一行上。

?

8.3 類聲明

?

[java]?view plaincopy

  1. /**?

  2. ?*?'extends'?clause?

  3. ?*/??

  4. class?Example?extends??

  5. ????????OtherClass?{??

  6. }??

  7. ???

  8. /**?

  9. ?*?'implements'?clause?

  10. ?*/??

  11. class?Example?implements?I1,??

  12. ????????I2,?I3?{??

  13. }??

  14. ???

  • ?extends子句在需要換行的地方,用缺省換行方式換行:#5OtherClass處換行,且OtherClass相對(duì)class縮進(jìn)了8個(gè)空格;

  • ?implements子句在需要換行的地方,用缺省換行方式換行:#12I2處換行,且I2相對(duì)class縮進(jìn)了8個(gè)空格。

?

?

8.4 構(gòu)造體聲明

?

[java]?view plaincopy

  1. /**?

  2. ?*?Parameters?

  3. ?*/??

  4. class?Example?{??

  5. ????Example(int?arg1,?int?arg2,??

  6. ????????????int?arg3,?int?arg4,??

  7. ????????????int?arg5,?int?arg6)?{??

  8. ????????this();??

  9. ????}??

  10. ???

  11. ????Example()?{??

  12. ????}??

  13. }??

  14. ???

  15. /**?

  16. ?*?'throws'?clause?

  17. ?*/??

  18. class?Example?{??

  19. ????Example()?throws?FirstException,??

  20. ????????????SecondException,??

  21. ????????????ThirdException?{??

  22. ????????returnOther.doSomething();??

  23. ????}??

  24. }??

  25. ???

  • ?構(gòu)造體的參數(shù)在需要換行的地方,用缺省換行方式換行:參數(shù)[#6 &#7]相對(duì)Example[#5]縮進(jìn)了8個(gè)空格;

  • ?構(gòu)造體throws子句在需要換行的地方,用缺省換行方式換行:子句[#20& #21]相對(duì)Example[#19]縮進(jìn)了8個(gè)空格。

?

?

8.5 方法聲明

?

[java]?view plaincopy

  1. /**?

  2. ?*?Declaration?

  3. ?*/??

  4. class?Example?{??

  5. ????public?final?synchronizedjava.lang.String?a_method_with_a_long_name()?{??

  6. ????}??

  7. }??

  8. ???

  9. /**?

  10. ?*?Parameters?

  11. ?*/??

  12. class?Example?{??

  13. ????void?foo(int?arg1,?int?arg2,??

  14. ????????????int?arg3,?int?arg4,??

  15. ????????????int?arg5,?int?arg6)?{??

  16. ????}??

  17. }??

  18. ???

  19. /**?

  20. ?*?'throws'?clause?

  21. ?*/??

  22. class?Example?{??

  23. ????int?foo()?throws?FirstException,??

  24. ????????????SecondException,??

  25. ????????????ThirdException?{??

  26. ????????returnOther.doSomething();??

  27. ????}??

  28. }??

  29. ???

  • ?方法聲明處不換行:#5 很長(zhǎng),但不分行;

  • ?方法聲明處的參數(shù)在需要換行的地方,用缺省換行方式換行:參數(shù)[#14& #15]相對(duì)voidfoo [#13]縮進(jìn)了8個(gè)空格;

  • ?方法聲明處的throws子句在需要換行的地方,用缺省換行方式換行:子句[#24& #25]相對(duì)intfoo [#23]縮進(jìn)了8個(gè)空格。

?

?

8.6 枚舉聲明

?

[java]?view plaincopy

  1. /**?

  2. ?*?Constants?

  3. ?*/??

  4. enum?Example?{??

  5. ????CANCELLED,?RUNNING,?WAITING,?FINISHED??

  6. }??

  7. ???

  8. enum?Example?{??

  9. ????GREEN(0,?255,?0),?RED(??

  10. ????????????255,?0,?0)??

  11. }??

  12. ???

  13. /**?

  14. ?*?'implements'?clause?

  15. ?*/??

  16. enum?Example?implements?A,?B,??

  17. ????????C?{??

  18. }??

  19. ???

  20. /**?

  21. ?*?Constant?arguments?

  22. ?*/??

  23. enum?Example?{??

  24. ????GREEN(0,?255,?0),?RED(??

  25. ????????????255,?0,?0)??

  26. }??

  27. ???

  • ?枚舉常量定義的地方,不換行:#5不換行;

  • ?implements子句在需要換行的地方,用缺省換行方式換行:#17 C處換行,且C相對(duì)enum縮進(jìn)了8個(gè)空格;

  • ?常量參數(shù)在需要換行的地方,用缺省換行方式換行:#10 和#25處換行,且相對(duì)GREEN縮進(jìn)了8個(gè)空格。

?

?

8.7 函數(shù)調(diào)用

?

[java]?view plaincopy

  1. /**?

  2. ?*?Arguments?

  3. ?*/??

  4. class?Example?{??

  5. ????void?foo()?{??

  6. ????????Other.bar(??

  7. ????????????????100,??

  8. ????????????????nested(200,?300,?400,??

  9. ????????????????????????500,?600,?700,??

  10. ????????????????????????800,?900));??

  11. ????}??

  12. }??

  13. ???

  14. /**?

  15. ?*?Qualified?invocations?

  16. ?*/??

  17. class?Example?{??

  18. ????int?foo(Some?a)?{??

  19. ????????return?a.getFirst();??

  20. ????}??

  21. }??

  22. ???

  23. /**?

  24. ?*?Explicit?constructor?invocations?

  25. ?*/??

  26. class?Example?extends?AnotherClass?{??

  27. ????Example()?{??

  28. ????????super(100,?200,?300,400,?500,??

  29. ????????????????600,?700);??

  30. ????}??

  31. }??

  32. ???

  33. /**?

  34. ?*?Object?allocation?arguments?

  35. ?*/??

  36. class?Example?{??

  37. ????SomeClass?foo()?{??

  38. ????????return?new?SomeClass(100,200,??

  39. ????????????????300,?400,?500,?600,??

  40. ????????????????700,?800,?900);??

  41. ????}??

  42. }??

  43. ???

  44. /**?

  45. ?*?Qualified?object?allocation?arguments?

  46. ?*/??

  47. class?Example?{??

  48. ????SomeClass?foo()?{??

  49. ????????return?SomeOtherClass.new?SomeClass(??

  50. ????????????????100,?200,?300,?400,?500);??

  51. ????}??

  52. }??

  53. ???

  • ?函數(shù)調(diào)用參數(shù)處,在需要換行的地方,用缺省換行方式換行:#7, #8和#9, #10處換行,且#7,#8相對(duì)Other.bar縮進(jìn)了8個(gè)空格, #9, #10相對(duì)nested縮進(jìn)了8個(gè)空格;

  • ?對(duì)象的方法調(diào)用處,在需要換行的地方,用缺省換行方式換行:#19這個(gè)例子不太好,如果這句很長(zhǎng),可以在a和getFirst之間換行,且.放在getFirst前;

  • ?顯示的構(gòu)造函數(shù)調(diào)用處,在需要換行的地方,用缺省換行方式換行:#29處換行,且相對(duì)#30的super縮進(jìn)8個(gè)空格;

  • ?對(duì)象創(chuàng)建參數(shù)處,在需要換行的地方,用缺省換行方式換行:#39, #40處換行,且相對(duì)#38的return縮進(jìn)8個(gè)空格;

  • ?對(duì)象方法構(gòu)造對(duì)象參數(shù)處,在需要換行的地方,用缺省換行方式換行:#50處換行,且相對(duì)#49的return縮進(jìn)8個(gè)空格.

?

?

8.8 表達(dá)式

?

[java]?view plaincopy

  1. /**?

  2. ?*?Binary?expressions?

  3. ?*/??

  4. class?Example?extends?AnotherClass?{??

  5. ????int?foo()?{??

  6. ????????int?sum?=?100?+?200?+?300?+?400??

  7. ????????????????+?500?+?600?+?700?+?800;??

  8. ????????int?product?=?1?*?2?*?3?*?4?*?5??

  9. ????????????????*?6?*?7?*?8?*?9?*?10;??

  10. ????????boolean?val?=?true?&&?false??

  11. ????????????????&&?true?&&?false??

  12. ????????????????&&?true;??

  13. ????????return?product?/?sum;??

  14. ????}??

  15. }??

  16. ???

  17. /**?

  18. ?*?Conditionals?

  19. ?*/??

  20. class?Example?extends?AnotherClass?{??

  21. ????int?Example(boolean?Argument)?{??

  22. ????????return?argument??100000??

  23. ????????????????:?200000;??

  24. ????}??

  25. }??

  26. ???

  27. /**?

  28. ?*?Array?initializers?

  29. ?*/??

  30. class?Example?{??

  31. ????int[]?fArray?=?{??

  32. ????????????1,?2,?3,?4,?5,?6,?7,?8,?9,??

  33. ????????????10,?11,?12??

  34. ????};??

  35. }??

  36. ???

  37. /**?

  38. ?*?Assignments?

  39. ?*/??

  40. class?Example?{??

  41. ????private?static?final?String?string?="TextTextText";??

  42. ???

  43. ????void?foo()?{??

  44. ????????for?(int?i?=?0;?i?<10;?i++)?{??

  45. ????????}??

  46. ????????String?s;??

  47. ????????s?=?"TextTextText";??

  48. ????}??

  49. }??

  50. ???

  • ?二元表達(dá)式,在需要換行的地方,用缺省換行方式換行:#7, #9和#11,#12處換行,且#7相對(duì)int?sum縮進(jìn)了8個(gè)空格,且#9相對(duì)int?product縮進(jìn)了8個(gè)空格,且#11& #12相對(duì)boolean?val縮進(jìn)了8個(gè)空格;

  • ?三元條件表達(dá)式,除了第一個(gè)元素,用缺省換行方式換行所有其他元素:#22& #23;

  • ?數(shù)組初始化體,在需要換行的地方,用缺省換行方式換行:#32 &#33處換行,且#32& #33相對(duì)int[] fArray縮進(jìn)了8個(gè)空格;

  • ?賦值語(yǔ)句,不需要換行:#41行很長(zhǎng)也不需要換行。

?

?

8.9 語(yǔ)句

?

[java]?view plaincopy

  1. /**?

  2. ?*?Compact?'if?else'?

  3. ?*/??

  4. class?Example?{??

  5. ????int?foo(int?argument)?{??

  6. ????????if?(argument?==?0)??

  7. ????????????return?0;??

  8. ????????if?(argument?==?1)??

  9. ????????????return?42;??

  10. ????????else??

  11. ????????????return?43;??

  12. ????}??

  13. }??

  14. ???

配置起什么用,沒看懂!

?

?

九、注釋(Comments)

?

?

[java]?view plaincopy

  1. ??

[java]?view plaincopy

  1. /**?

  2. ?*?An?example?for?comment?formatting.?This?example?is?meant?to?illustrate?the?various?possibilities?offered?by?<i>Haili?TIAN</i>?in?order?to?format?comments.?

  3. ?*/??

  4. ???

  5. package?mypackage;??

  6. ???

  7. /**?

  8. ?*?This?is?the?comment?for?the?example?interface.?

  9. ?*/??

  10. interface?Example?{??

  11. ????//?This?is?a?long?comment?with?white?space?that?should?be?split?in?multiple??

  12. ????//?line?comments?in?case?the?linecomment?formatting?is?enabled??

  13. ????int?foo3();??

  14. ?????

  15. //????void?commented()?{??

  16. //????????System.out.println("indented");??

  17. //????}??

  18. ???

  19. ????//?void?indentedCommented()?{??

  20. ????//?System.out.println("indented");??

  21. ????//?}??

  22. ???

  23. ????/*?block?comment?on?first?column?*/??

  24. ????int?bar();??

  25. ???

  26. ????/*?

  27. ?????*?These?possibilities?include:<ul><li>Formatting?of?header?

  28. ?????*?comments.</li><li>Formatting?of?Javadoc?tags</li></ul>?

  29. ?????*/??

  30. ????int?bar2();?//?This?is?along?comment?that?should?be?split?in?multiple?line??

  31. ????????????????//?comments?in?case?the?linecomment?formatting?is?enabled??

  32. ???

  33. ????/**?

  34. ?????*?The?following?is?some?sample?code?whichillustrates?source?formatting?

  35. ?????*?within?javadoc?comments:?

  36. ?????*?

  37. ?????*?<pre>?

  38. ?????*?public?class?Example?{?

  39. ?????*????final?int?a?=?1;?

  40. ?????*?

  41. ?????*????final?boolean?b?=?true;?

  42. ?????*?}?

  43. ?????*?</pre>?

  44. ?????*?

  45. ?????*?Descriptions?of?parameters?and?returnvalues?are?best?appended?at?end?of?

  46. ?????*?the?javadoc?comment.?

  47. ?????*?

  48. ?????*?@param?a?The?first?parameter.?For?an?optimum?result,?this?should?be?an?

  49. ?????*????????????odd?number?between?0?and?100.?

  50. ?????*?@param?b?The?second?parameter.?

  51. ?????*?@return?The?result?of?the?foo?operation,?usually?within?0?and?1000.?

  52. ?????*/??

  53. ????int?foo(int?a,?int?b);??

  54. }??

  • ?注釋每行長(zhǎng)度是80個(gè)字符;

  • ?開啟對(duì)Javadoc注釋的格式化;

    • ? 用html的TAG;

    • ? 開啟對(duì)‘pre’TAG里的Java代碼片段進(jìn)行格式化;

?

#37 ~ #43

?

  • ? Javadoc TAG前面插入空白行;

?

#47是插入的行

?

  • ? Javadoc Tag縮進(jìn)

    • §?‘@param’TAG后面的描述縮進(jìn)

?

#49的odd相對(duì)#48的a縮進(jìn)了4個(gè)空格。

?

  • ? 不對(duì)‘@param’TAG插入新行;

?

#48和#50的描述與參數(shù)在同一行。

?

  • ? ‘/**’和‘*/’在不同的行;

  • ? 移除空白行;

?

Javadoc注釋形式見#33~ #52

?

  • ?開啟對(duì)塊注釋的格式化;

    • ? ‘/*’和‘*/’在不同的行;

    • ? 移除空白行;

?

塊注釋形式見#26~ #29

?

  • ?開啟對(duì)行注釋的格式化;

    • ? 注釋在行的第一列

?

#15, #16 和#17是行注釋,且‘//’與原程序之間的空格仍舊保持。

?

  • ?關(guān)閉對(duì)頭注釋的格式化;

?

#1, #2和#3的頭注釋保持不變。

?

  • ?關(guān)閉對(duì)塊注釋縮進(jìn)到第一列;

?

#23是塊注釋,與程序有相同的縮進(jìn),不是縮進(jìn)到第一列。

?

  • ?關(guān)閉對(duì)行注釋縮進(jìn)到第一列;

?

注:筆者對(duì)行注釋驗(yàn)證,發(fā)現(xiàn)Eclipse中無(wú)論如何設(shè)置,基本不會(huì)改變其行為。

?

?

十、Android中XML文件的格式化

?

前面講了那么多都是針對(duì)Java程序的,Android中有大量的XML文件。對(duì)XML的格式也要進(jìn)行排版格式化。

打開Window> Preferences,可以通過兩個(gè)地方對(duì)XML文件進(jìn)行格式化:

1)?????XML > XML Files > Editor

對(duì)其中的各項(xiàng)設(shè)置進(jìn)行配置

2)?????Android > Editors

對(duì)其中的各項(xiàng)設(shè)置進(jìn)行配置

?

?

總結(jié)

 本文分析了Android編碼風(fēng)格在Eclipse環(huán)境中具體實(shí)施,通過對(duì)Eclipse環(huán)境的配置可以方便的格式化Android程序:Java文件和XML文件,特別是Java文件,其配置是基于JDT實(shí)現(xiàn)的,所以對(duì)Java的方方面面的配置都覆蓋了。

? ? ? ? 但是,只有這些還不夠,對(duì)一般的Java設(shè)計(jì)編碼原則和Android中推薦的風(fēng)格還不能完全自動(dòng)執(zhí)行,還需要人的參與,依賴于團(tuán)隊(duì)風(fēng)格規(guī)范的制定,成員的設(shè)計(jì)能力和領(lǐng)悟執(zhí)行能力。下面是這些工具所不能解決的風(fēng)格和原則:

?

  • ?對(duì)Exception的處理;

  • ?寫短小的方法;

  • ?域的命名規(guī)則;

  • ?程序塊內(nèi)的邏輯分組;

  • ?等等。



文章來(lái)源《IT藍(lán)豹》



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI