反例:$name
/ name_ / name$ /name__
正例:alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。
反例:DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 = 3
说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用。
正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion
反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion
说明:UpperCamelCase叫做"大骆驼拼写法",又称"帕斯卡拼写法"(PascalCase),第一个词的首字母,以及后面每个词的首字母都大写
正例: localValue / getHttpMessage() / inputUserId
说明:lowerCamelCase叫做"小骆驼拼写法",第一个词的首字母小写,后面每个词的首字母大写。
正例:MAX_STOCK_COUNT
反例:MAX_COUNT
说明:Java中方法和变量的名称长度限制为2的16次方,一般来说要在清晰和长度中进行权衡。
正例:定义整形数组,int[] arrayDemo
反例:在 main 参数中,使用 String args[]来定义。
反例:定义布尔变量 private boolean isDeleted
说明:定义为基本数据类型Boolean isDeleted的属性,它的方法名是isDeleted(),RPC框架在反向解析的时候,“误以为”对应的属性名称是deleted,导致属性获取不到,进而抛出异常。这应该是阿里内部开发过程中获得的教训,通过遵循这个规范能够从根源处减少此类bug的发生。
正例:应用工具类包名为com.alibaba.ai.util、类名为MessageUtils(此规则参考spring的框架结构)
反例:AbstractClass“缩写”命名成AbsClass;condition“缩写”命名成condi,此类随意缩写严重降低了代码的可阅读性。
说明:这一点需要非常注意,我们在编码的过程中可能会因为变量太长而将名称进行缩写,很多时候自己能够理解,却降低了代码的可读性。不要嫌名字长,能够完整清晰的表达出意思才是更好的做法。
正例:在JDK中,表达原子更新的类名为:AtomicReferenceFieldUpdater
反例:变量 int a 的随意命名方式。
说明:命名时需要使名字能够说明该元素的含义,提高代码的可读性,不要使用临时的命名方式,比如list,temp等。刷算法刷多了容易出现这种情况。
正例:
public class OrderFactory;
public class LoginProxy;
public class ResourceObserver;
说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计理念。
正例:接口方法签名void commit(); 接口基础常量String COMPANY = “alibaba”;
反例:接口方法定义public abstract void f();
说明:接口中方法会被隐式指定为public abstract,并且只能是public abstract,其他修饰符如protected,private会报错。jdk8以后,接口允许用default修饰方法,需要有方法体,是对所有实现类都有价值的默认实现。jdk9允许定义私有方法。
接口中变量会被隐式指定为public static final,并且只能是public,其他修饰符如protected,private会报错,并且因为是final变量,必须显式初始化。
jdk7-9具体接口的变化
正例:CacheServiceImpl实现CacheService接口。
正例:AbstractTranslator实现 Translatable接口。
正例:枚举名字为ProcessStatusEnum的成员名称:SUCCESS / UNKNOWN_REASON。
说明:枚举其实就是特殊的类,域成员均为常量,且构造方法被默认强制是私有。
1) 获取单个对象的方法用get做前缀。
2) 获取多个对象的方法用list做前缀,复数形式结尾如:listObjects。
3) 获取统计值的方法用count做前缀。
4) 插入的方法用save/insert做前缀。
5) 删除的方法用remove/delete做前缀。
6) 修改的方法用update做前缀。
1) 数据对象:xxxDO,xxx即为数据表名。
2) 数据传输对象:xxxDTO,xxx为业务领域相关的名称。
3) 展示对象:xxxVO,xxx一般为网页名称。
4) POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。
这一部分主要讲的就是开发中的一些命名规范和风格,可以看到尽量要做到统一风格,同时提高代码的可读性和自解释性,希望做到望文知意,看到名称就知道这个类是什么类型,这个方法能做到什么,这个变量代表什么。
编码规范是较为主观的,有些人喜欢换行,有些人喜欢空格,但在团队开发中,需要做到硬性统一,便于团队成员之间的协作。