CheckStyle规则属性说明

参考:http://zxmzfbdc.iteye.com/blog/259710



属性

 说明
basedir代码所在的位置
AbstractClassNameformat: 定义抽象类的命名规则
PackageNameformat: 定义包名的命名规则
TypeNameformat: 定义类和接口的命名规则
tokens: 定义规则适用的类型,例如:CLASS_DEF表示类,INTERFACE_DEF 表示接口
ParameterNameformat: 定义参数名的命名规则
ParameterNumbermax: 定义最多有多少个参数
tokens: 定义检查的类型
StaticVariableNameformat: 定义静态变量的命名规则
MethodNameformat: 定义方法名的命名规则
LeftCurlyoption: 定义左大括号'{'显示位置,eol在同一行显示,nl在下一行显示
maxLineLength: 大括号'{'所在行行最多容纳的字符数
tokens: 该属性适用的类型,例:CLASS_DEF,INTERFACE_DEF,METHOD_DEF,CTOR_DEF
LineLengthmax: 定义一行所能容许的字符数
ignorePattern: 定义可以忽略的格式
MethodLength检查方法的行数
max: 最多容许的行数
countEmpty: 是否计算空行
tokens: 定义检查的类型
RightCurlyoption: 右大括号是否单独一行显示
tokens: 定义检查的类型
PackageHtml检查对每一个包是否生成了package.html文件
fileExtensions: 指定要检查的文件的类型,如果只包含java文件,就不必指定
JavadocType检查类或者接口的javadoc注释
authorFormat: 检查author标签的格式
versionFormat: 检查version标签的格式
scope: 可以检查的类的范围,例如:public只能检查public修饰的类,private可以检查所有的类
excludeScope: 不能检查的类的范围,例如:public,public的类将不被检查,但访问权限小于public的类仍然会检查,其他的权限以此类推
tokens: 该属性适用的类型,例如:CLASS_DEF,INTERFACE_DEF
JavadocMethod检查方法的javadoc的注释
scope: 可以检查的方法的范围,例如:public只能检查public修饰的方法,private可以检查所有的方法
allowMissingParamTags: 是否忽略对参数注释的检查
allowMissingThrowsTags: 是否忽略对throws注释的检查
allowMissingReturnTag: 是否忽略对return注释的检查
JavadocVariable检查类变量的注释
scope: 检查变量的范围,例如:public只能检查public修饰的变量,private可以检查所有的变量
JavadocStylescope:
excludeScope:
checkFirstSentence:
checkEmptyJavadoc:
checkHtml:
tokens:
LocalVariableNameformat: 定义局部变量的命名规则
LocalFinalVariableNameformat: 定义局部常量的命名规则
ConstantNameformat: 定义全局常量的命名规则
MemberNameformat: 定义非静态成员变量的命名规则
applyToPublic: 是否适用于public的成员变量
applyToProtected: 是否适用于protected的成员变量
applyToPackage: 是否适用于package的成员变量
applyToPrivate: 是否适用于private的成员变量
AvoidStarImport必须导入类的完整路径,即不能使用*导入所需的类
excludes: 定义可以使用*导入的包
ImportOrder定义导入包的顺序
groups: 定义导入包的顺序,默认以字母顺序导入
ordered: 定义包是否必须按规定的顺序显示
separated: 定义包与包之间是否应添加空白行
caseSensitive: 是否区分包名的大小写
IllegalImport检查是否从非法的包中导入了类
illegalPkgs: 定义非法的包名称
UnusedImports检查是否导入的包没有使用
RedundantImport检查是否导入了不必显示导入的类
EmptyForInitializerPad检查for语句初始化变量的格式
option: 定义初始化语句中是否使用空格,例如:space表示使用空格,则for(int i = 0; i < 100; i++)就是符合格式要求的,而for(int i=0; i<100;i++)就不符合要求
EmptyForIteratorPad检查for iterator语句是否使用空格
option:定义初始化语句是否使用空格,例如:space表示使用空格,则for(Iterator iterator = List.iterator();iterator.hasNext(); iterator.next())就是形式合理的,否则就是形式不合理的
ExecutableStatementCount检查要执行的语句的数目
max: 定义所能容许的语句的最多数目
tokens: 定义可以检查的类型,例如:CTOR_DEF,METHOD_DEF,STATIC_INIT,INSTANCE_INIT
FileLengthmax: 定义一个文件所能容许的行数
AnonInnerLength检查匿名内部类
max: 定义匿名内部类最多容许的行数
MethodParamPad检查方法参数的格式
allowLineBreaks: 参数是否允许在不同行(注:没有作用)
option: 在参数和括号、参数和标识符之间是否包含空格
OperatorWrap检查运算符是否在应在同一行
option: 定义运算符的位置,eol在同一行,nl在下一行
tokens: 定义检查的类型
ParenPad检查左小括号'('后边和右小括号')'前边是否有空格
option: space表示有空格,nospace表示没有空格
tokens: 定义检查的类型
TypecastParenPad暂不清楚
TabCharacter检查源码中是否包含\t
WhitespaceAfter检查类型后是否包含空格
tokens: 检查的类型
WhitespaceAround暂不清楚
ModifierOrder检查修饰符的顺序,默认是 public,protected,private,abstract,static,final,transient,volatile,synchronized,native,strictfp(注:定义不起作用)
RedundantModifier检查是否有多余的修饰符,例如:接口中的方法不必使用public、abstract修饰
tokens: 检查的类型
EmptyBlock检查是否有空代码块
option: 定义代码块中应该包含的内容,例如:stmt表示语句
tokens: 检查的类型
NeedBraces检查是否应该使用括号的地方没有加括号
tokens: 定义检查的类型
AvoidNestedBlocks检查是否有嵌套的代码块
allowInSwitchCase: 定义是否允许switch case中使用嵌套的代码块
ArrayTrailingComma检查初始化数祖时,最后一个元素后面是否加了逗号,如果左右大括号都在同一行,则可以不加逗号
AvoidInlineConditionals检查是否在同一行初始化, 例如:private int Age = nGe==1 ? 100 : 0; 就应该避免
CovariantEquals暂不清楚
ModifiedControlVariable检查循环控制变量是否被修改
SimplifyBooleanExpression检查是否有boolean使用冗余的地方,例如:b == true、b || true,应该简化为 b、b
SimplifyBooleanReturn检查是否在返回boolean值时是否有使用冗余的地方,例如:
    if(valid())
        return true;
    else
        return false;
应该改为:
    return valid();
StringLiteralEquality检查在判断字符串是否相等时是否使用了正确的形式
EqualsHashCode检查在重写了equals方法后是否重写了hashCode方法
FinalLocalVariable检查变量值没有改动的情况下,该变量是否定义成了final
MissingSwitchDefault检查switch语句是否忘记了default标签
RedundantThrows检查是否抛出了多余的异常
DefaultComesLast检查switch中default是否在所有case的后面
MissingCtor检查类中是否显式定义了构造器
FallThrough检查switch中case后是否加入了跳出语句,例如:return、break、throw、continue
MultipleStringLiterals检查一个字符串变量在不改变变量值的情况下或者字符串出现的次数
allowedDuplicates: 定义在类中一个字符串变量在不改变变量值的情况下或者字符串所能使用的最多次数
MultipleVariableDeclarations检查一次声明多个变量时,变量是否在同一行或者在同一个语句中
RequireThis检查是否使用了this
checkFields: 是否检查变量引用
checkMethods: 是否检查方法调用
UnnecessaryParentheses检查是否使用了多余的小括号
VisibilityModifier检查变量是否对外部可见
packageAllowed: 变量包内成员可以访问
protectedAllowed: 变量是受保护的
publicMemberPattern: 可以公开访问的变量所匹配的命名形式
FinalClass只有私有构造器的类必须声明为final
InterfaceIsType检查接口是否只定义了变量而没有定义方法,因为接口应该用来描述一个类型,所以只定义变量而不定义方法是不恰当的
allowMarkerInterfaces: 是否检查空接口
HideUtilityClassConstructor只定义了静态方法的类不应该定义一个公有的构造器
DesignForExtension检查类是否被设计为可扩展的,如果是,则方法应该abstract、final或者是空的
ThrowsCount检查抛出异常的数量
max: 定义抛出异常的最大数目
StrictDuplicateCode检查类中是否有代码复制的问题
min: 允许代码重复的最小行数
charset: 文件所用的字符集
BooleanExpressionComplexitymax: 布尔运算符在一条语句中允许出现的最大数目
GenericIllegalRegexp检查代码中是否有不合适的引用形式或者字符
format: 定义检查所匹配的类型
ignoreCase: 是否区分大小写
ignoreComments: 是否忽略注释
message: 出现问题应该显示给用户的信息
NewlineAtEndOfFile检查文件是否以一个新行结束
lineSeparator: 行分隔符的类型,windows是crlf
UncommentedMain检查是否有没有被注掉或者删除的main方法
excludedClasses: 定义可以带main方法的类所匹配的名字形式
UpperEll检查初始化长整型变量时,数字後是加了大写字母'L'而不是小写字母'l'
ArrayTypeStyle检查再定义数组时,采用java风格还是c风格,例如:int[] num是java风格,int num[]是c风格
javaStyle: 定义是否采用java风格定义数组
FinalParameters检查参数是否是常量
tokens: 定义检查的类型
Indentation检查代码的缩进是否符合要求
basicOffset: 定义代码体相对于所属的代码体的缩进量
braceAdjustment: 定义括号的缩进量
caseIndent: 定义case的缩进量
RequiredRegexp检查文件中是否存在相应的文字
format: 定义所匹配的形式
usage.OneMethodPrivateField检查是否只有一个方法访问了私有变量
ignoreFormat: 定义可以忽略的变量所匹配的命名形式
usage.UnusedLocalVariable检查是否有命名後没有使用的变量
ignoreFormat: 定义可以忽略的变量所匹配的命名形式
usage.UnusedParameter检查是否有没有使用的参数
ignoreFormat: 定义可以忽略的变量所匹配的命名形式
ignoreCatch: 是否忽略catch中的参数
ignoreNonLocal: 是否忽略非本地的变量
usage.UnusedPrivateField检查是否存在未被使用的私有成员变量
ignoreFormat: 定义可以忽略的变量所匹配的命名形式
usage.UnusedPrivateMethod检查是否存在未被使用的私有方法
ignoreFormat: 定义可以忽略的变量所匹配的命名形式


一个checkstyle文件的例子:

Ehoo_checks.xml,checkstyles的配置文件代码   收藏代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE module PUBLIC  
  3.     "-//Puppy Crawl//DTD Check Configuration 1.2//EN"  
  4.     "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">  
  5.   
  6. <module name="Checker">  
  7.     <property name="basedir" value="${check.src}"/>  
  8.     <property name="localeCountry" value="CN"/>  
  9.     <property name="localeLanguage" value="cn"/>  
  10.     <metadata name="com.atlas-sw.eclipse" value="I like Sydney"/>  
  11.     <property name="severity" value="error"/>  
  12.     <module name="SuppressionFilter">  
  13.         <property name="file" value="${check.filter.file}"/>  
  14.     </module>  
  15.     <module name="PackageHtml">  
  16.         <property name="fileExtensions" value="java,properties"/>  
  17.     </module>  
  18.     <module name="Translation">  
  19.         <property name="severity" value="info"/>  
  20.     </module>  
  21.     <module name="StrictDuplicateCode">  
  22.         <property name="min" value="7"/>  
  23.         <property name="charset" value="UTF-8"/>  
  24.     </module>  
  25.     <module name="NewlineAtEndOfFile">  
  26.     </module>  
  27.     <module name="TreeWalker">  
  28.         <module name="AbstractClassName">  
  29.             <property name="format" value="^Abstract.*$|^.*Factory$"/>  
  30.         </module>  
  31.         <module name="ImportOrder">  
  32.             <property name="groups" value="java,javax"/>  
  33.             <property name="ordered" value="true"/>  
  34.             <property name="separated" value="true"/>  
  35.             <property name="caseSensitive" value="true"/>  
  36.         </module>  
  37.         <module name="ExecutableStatementCount">  
  38.             <property name="max" value="20"/>  
  39.             <property name="tokens" value="CTOR_DEF,METHOD_DEF,STATIC_INIT,INSTANCE_INIT"/>  
  40.         </module>  
  41.         <module name="AnonInnerLength">  
  42.             <property name="max" value="20"/>  
  43.         </module>  
  44.         <module name="EmptyForInitializerPad">  
  45.             <property name="option" value="space"/>  
  46.         </module>  
  47.         <module name="EmptyForIteratorPad">  
  48.             <property name="option" value="space"/>  
  49.         </module>  
  50.         <module name="MethodParamPad">  
  51.             <property name="allowLineBreaks" value="false"/>  
  52.             <property name="option" value="space"/>  
  53.             <property name="tokens" value="METHOD_DEF,CTOR_DEF"/>  
  54.         </module>  
  55.         <module name="NoWhitespaceAfter">  
  56.             <property name="allowLineBreaks" value="true"/>  
  57.         </module>  
  58.         <module name="NoWhitespaceBefore">  
  59.             <property name="allowLineBreaks" value="true"/>  
  60.         </module>  
  61.         <module name="TypecastParenPad">  
  62.             <property name="option" value="space"/>  
  63.         </module>  
  64.         <module name="ParenPad">  
  65.             <property name="option" value="nospace"/>  
  66.         </module>  
  67.         <module name="WhitespaceAfter">  
  68.             <property name="tokens" value="COMMA,SEMI,TYPECAST"/>  
  69.         </module>  
  70.         <module name="WhitespaceAround">  
  71.             <property name="tokens" value="ASSIGN"/>  
  72.         </module>  
  73.         <module name="ModifierOrder"/>  
  74.         <module name="RedundantModifier">  
  75.             <property name="tokens" value="METHOD_DEF,VARIABLE_DEF"/>  
  76.         </module>  
  77.         <module name="AvoidNestedBlocks">  
  78.             <property name="allowInSwitchCase" value="true"/>  
  79.         </module>  
  80.         <module name="MissingSwitchDefault"/>  
  81.         <module name="ModifiedControlVariable"/>  
  82.         <module name="RedundantThrows">  
  83.             <property name="allowUnchecked" value="true"/>  
  84.             <property name="allowSubclasses" value="true"/>  
  85.         </module>  
  86.         <module name="StringLiteralEquality"/>  
  87.         <module name="SuperClone"/>  
  88.         <module name="SuperFinalize"/>  
  89.         <module name="IllegalCatch"/>  
  90.         <module name="PackageDeclaration"/>  
  91.         <module name="ReturnCount">  
  92.             <property name="max" value="3"/>  
  93.         </module>  
  94.         <module name="DeclarationOrder"/>  
  95.         <module name="ParameterAssignment"/>  
  96.         <module name="DefaultComesLast"/>  
  97.         <module name="FallThrough"/>  
  98.         <module name="MultipleStringLiterals">  
  99.             <property name="allowedDuplicates" value="3"/>  
  100.         </module>  
  101.         <module name="MultipleVariableDeclarations"/>  
  102.         <module name="RequireThis">  
  103.             <property name="checkFields" value="false"/>  
  104.             <property name="checkMethods" value="false"/>  
  105.         </module>  
  106.         <module name="UnnecessaryParentheses"/>  
  107.         <module name="HideUtilityClassConstructor"/>  
  108.         <module name="ThrowsCount">  
  109.             <property name="max" value="7"/>  
  110.         </module>  
  111.         <module name="BooleanExpressionComplexity">  
  112.             <property name="max" value="7"/>  
  113.         </module>  
  114.         <module name="ClassDataAbstractionCoupling">  
  115.             <property name="max" value="7"/>  
  116.         </module>  
  117.         <module name="AvoidInlineConditionals"/>  
  118.         <module name="CovariantEquals"/>  
  119.         <module name="HiddenField">  
  120.         </module>  
  121.         <module name="InterfaceIsType">  
  122.             <property name="allowMarkerInterfaces" value="true"/>  
  123.         </module>  
  124.         <module name="UncommentedMain">  
  125.             <property name="excludedClasses" value="^$"/>  
  126.         </module>  
  127.         <module name="ArrayTypeStyle">  
  128.             <property name="javaStyle" value="true"/>  
  129.         </module>  
  130.         <module name="Indentation">  
  131.             <property name="basicOffset" value="4"/>  
  132.             <property name="braceAdjustment" value="0"/>  
  133.             <property name="caseIndent" value="4"/>  
  134.         </module>  
  135.         <module name="RequiredRegexp">  
  136.             <property name="format" value="^$"/>  
  137.         </module>  
  138.         <module name="usage.OneMethodPrivateField">  
  139.             <property name="ignoreFormat" value="^$"/>  
  140.         </module>  
  141.         <module name="usage.UnusedLocalVariable">  
  142.             <property name="ignoreFormat" value="^$"/>  
  143.         </module>  
  144.         <module name="usage.UnusedParameter">  
  145.             <property name="ignoreFormat" value="^$"/>  
  146.             <property name="ignoreCatch" value="true"/>  
  147.             <property name="ignoreNonLocal" value="false"/>  
  148.         </module>  
  149.         <module name="usage.UnusedPrivateField">  
  150.             <property name="ignoreFormat" value="^$"/>  
  151.         </module>  
  152.         <module name="usage.UnusedPrivateMethod">  
  153.             <property name="ignoreFormat" value="^$"/>  
  154.         </module>  
  155.         <property name="cacheFile" value="${checkstyle.dir}/cacheFile"/>  
  156.         <property name="fileExtensions" value="java,ejb,jpf"/>  
  157.         <property name="charset" value="UTF-8"/>  
  158.         <property name="tabWidth" value="4" />  
  159.         <module name="FileContentsHolder">  
  160.         </module>  
  161.         <module name="GenericIllegalRegexp">  
  162.             <property name="format" value="\s$"/>  
  163.             <property name="ignoreCase" value="true"/>  
  164.             <property name="ignoreComments" value="true"/>  
  165.             <property name="message" value="wrong used"/>  
  166.         </module>  
  167.         <module name="AvoidStarImport">  
  168.             <property name="excludes" value="java.io,java.util"/>  
  169.         </module>  
  170.         <module name="ConstantName">  
  171.             <property name="format" value="^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"/>  
  172.         </module>  
  173.         <module name="EmptyBlock">  
  174.             <property name="option" value="stmt"/>  
  175.         </module>  
  176.         <module name="EqualsHashCode"/>  
  177.         <module name="FileLength">  
  178.             <property name="max" value="1000"/>  
  179.         </module>  
  180.         <module name="IllegalImport">  
  181.         </module>  
  182.         <module name="IllegalInstantiation"/>  
  183.         <module name="InnerAssignment"/>  
  184.         <module name="JavadocType">  
  185.             <property name="authorFormat" value="\S"/>  
  186.             <property name="scope" value="protected"/>  
  187.             <property name="versionFormat" value="\$Revision.*\$"/>  
  188.             <property name="excludeScope" value="public"/>  
  189.             <property name="tokens" value="CLASS_DEF,INTERFACE_DEF"/>  
  190.         </module>  
  191.         <module name="JavadocMethod">  
  192.             <property name="scope" value="private"/>  
  193.             <property name="allowMissingParamTags" value="false"/>  
  194.             <property name="allowMissingThrowsTags" value="false"/>  
  195.             <property name="allowMissingReturnTag" value="false"/>  
  196.             <property name="tokens" value="METHOD_DEF"/>  
  197.             <property name="allowUndeclaredRTE" value="true"/>  
  198.             <property name="allowThrowsTagsForSubclasses" value="true"/>  
  199.         </module>  
  200.         <module name="JavadocVariable">  
  201.             <property name="scope" value="private"/>  
  202.         </module>  
  203.         <module name="JavadocStyle">  
  204.             <property name="scope" value="public"/>  
  205.             <property name="checkFirstSentence" value="true"/>  
  206.             <property name="checkEmptyJavadoc" value="true"/>  
  207.             <property name="checkHtml" value="true"/>  
  208.         </module>  
  209.         <module name="LeftCurly">  
  210.             <property name="option" value="eol"/>  
  211.             <property name="maxLineLength" value="80"/>  
  212.             <property name="tokens"   
  213.                 value="CLASS_DEF,INTERFACE_DEF,METHOD_DEF,CTOR_DEF"/>  
  214.         </module>  
  215.         <module name="LineLength">  
  216.             <property name="max" value="80"/>  
  217.             <property name="ignorePattern" value="^ *\* *[^ ]+$"/>  
  218.         </module>  
  219.         <module name="LocalFinalVariableName">  
  220.             <property name="format" value="^[A_Z][A-Z0-9]*(_[A_Z0-9]+)*$"/>  
  221.         </module>  
  222.         <module name="LocalVariableName">  
  223.             <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>  
  224.         </module>  
  225.         <module name="MemberName">  
  226.             <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>  
  227.             <property name="applyToPublic" value="true"/>  
  228.             <property name="applyToProtected" value="true"/>  
  229.             <property name="applyToPackage" value="true"/>  
  230.             <property name="applyToPrivate" value="true"/>  
  231.         </module>  
  232.         <module name="MethodLength">  
  233.             <property name="max" value="100"/>  
  234.             <property name="countEmpty" value="true"/>  
  235.             <property name="tokens" value="METHOD_DEF"/>  
  236.         </module>  
  237.         <module name="MethodName">  
  238.             <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>  
  239.         </module>  
  240.         <module name="ModifierOrder"/>  
  241.         <module name="NeedBraces">  
  242.         </module>  
  243.         <module name="OperatorWrap">  
  244.             <property name="tokens"   
  245.                 value="ASSIGN, DIV, DIV_ASSIGN, PLUS_ASSIGN, MINUS, MINUS_ASSIGN, STAR, STAR_ASSIGN, MOD, MOD_ASSIGN, SR, SR_ASSIGN, BSR, BSR_ASSIGN, SL, SL_ASSIGN, BXOR, BXOR_ASSIGN, BOR, BOR_ASSIGN, BAND, BAND_ASSIGN,PLUS, QUESTION"/>  
  246.             <property name="option" value="eol"/>  
  247.         </module>  
  248.         <module name="PackageName">  
  249.             <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>  
  250.         </module>  
  251.         <module name="ParameterName">  
  252.             <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>  
  253.         </module>  
  254.         <module name="ParameterNumber">  
  255.             <property name="max" value="10"/>  
  256.             <property name="tokens" value="METHOD_DEF,CTOR_DEF"/>  
  257.         </module>  
  258.         <module name="RedundantImport"/>  
  259.         <module name="RedundantModifier"/>  
  260.         <module name="RightCurly">  
  261.             <property name="option" value="alone"/>  
  262.             <property name="tokens" value="LITERAL_TRY"/>  
  263.         </module>  
  264.         <module name="SimplifyBooleanExpression"/>  
  265.         <module name="SimplifyBooleanReturn"/>  
  266.         <module name="StaticVariableName">  
  267.             <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>  
  268.         </module>  
  269.         <module name="TypeName">  
  270.             <property name="format" value="^[A-Z][a-zA-Z0-9]*$"/>  
  271.             <property name="tokens" value="CLASS_DEF,INTERFACE_DEF"/>  
  272.         </module>  
  273.         <module name="UnusedImports"/>  
  274.         <module name="UpperEll"/>  
  275.         <module name="VisibilityModifier">  
  276.             <property name="packageAllowed" value="false"/>  
  277.             <property name="protectedAllowed" value="false"/>  
  278.             <property name="publicMemberPattern" value="^seriaVersionUID$"/>  
  279.         </module>  
  280.         <module name="WhitespaceAround"/>  
  281.         <module name="FinalClass"/>  
  282.         <module name="MissingSwitchDefault"/>  
  283.         <module name="Indentation">  
  284.             <property name="basicOffset" value="4"/>  
  285.             <property name="braceAdjustment" value="0"/>  
  286.             <property name="caseIndent" value="0"/>  
  287.         </module>  
  288.         <module name="ArrayTrailingComma"/>  
  289.         <module name="CyclomaticComplexity">  
  290.             <property name="severity" value="ignore"/>  
  291.         </module>  
  292.         <module name="NestedIfDepth">  
  293.             <property name="max" value="1"/>  
  294.         </module>  
  295.         <module name="NestedTryDepth">  
  296.             <property name="max" value="3"/>  
  297.         </module>  
  298.         <module name="ExplicitInitialization"/>  
  299.     </module>  
  300. </module> 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值