列一下OOP规约,编程的时候共勉!别踏坑!
- 【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。
- 【强制】所有的覆写方法,必须加@ Override 注解。
说明: getObject() 与 get 0 bject() 的问题。一个是字母的 O ,一个是数字的 0,加@ Override
可以准确判断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编
译报错。 - 【强制】相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object 。
说明:可变参数必须放置在参数列表的最后。 ( 提倡同学们尽量不用可变参数编程 )
正例: public List listUsers(String type, Long… ids) {…} - 【强制】外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生影响。接口过时必须加@ Deprecated 注解,并清晰地说明采用的新接口或者新服务是什么。
- 【强制】不能使用过时的类或方法。
说明: java . net . URLDecoder 中的方法 decode(String encodeStr) 这个方法已经过时,应该使用双参数 decode(String source, String encode) 。接口提供方既然明确是过时接口,那么有义务同时提供新的接口 ; 作为调用方来说,有义务去考证过时方法的新实现是什么。 - 【强制】 Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals 。
正例:" test " .equals(object);
反例: object.equals( " test " );
说明:推荐使用 java . util . Objects # equals(JDK 7 引入的工具类 ) - 【强制】所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。
说明:对于 Integer var = ? 在-128 至 127 范围内的赋值, Integer 对象是在IntegerCache . cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方法进行判断。 - 关于基本数据类型与包装数据类型的使用标准如下:
1 ) 【强制】所有的 POJO 类属性必须使用包装数据类型。
2 ) 【强制】 RPC 方法的返回值和参数必须使用包装数据类型。
3 ) 【推荐】所有的局部变量使用基本数据类型。
说明: POJO 类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何NPE 问题,或者入库检查,都由使用者来保证。
正例:数据库的查询结果可能是 null ,因为自动拆箱,用基本数据类型接收有 NPE 风险。
反例:比如显示成交总额涨跌情况,即正负 x %, x 为基本数据类型,调用的 RPC 服务,调用不成功时,返回的是默认值,页面显示为 0%,这是不合理的,应该显示成中划线。所以包装数据类型的 null 值,能够表示额外的信息,如:远程调用失败,异常退出。 - 【强制】定义 DO / DTO / VO 等 POJO 类时,不要设定任何属性默认值。
反例: POJO 类的 gmtCreate 默认值为 new Date(), 但是这个属性在数据提取时并没有置入具体值,在更新其它字段时又附带更新了此字段,导致创建时间被修改成当前时间。 - 【强制】序列化类新增属性时,请不要修改 serialVersionUID 字段,避免反序列失败 ; 如果完全不兼容升级,避免反序列化混乱,那么请修改 serialVersionUID 值。说明:注意 serialVersionUID 不一致会抛出序列化运行时异常。
- 【强制】构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在 init 方法中。
- 【强制】 POJO 类必须写 toString 方法。使用 IDE 中的工具: source > generate toString时,如果继承了另一个 POJO 类,注意在前面加一下 super . toString 。
说明:在方法执行抛出异常时,可以直接调用 POJO 的 toString() 方法打印其属性值,便于排查问题。 - 【强制】禁止在 POJO 类中,同时存在对应属性 xxx 的 isXxx() 和 getXxx() 方法。
说明:框架在调用属性 xxx 的提取方法时,并不能确定哪个方法一定是被优先调用到。
至于对OOP规约的推荐方式,就不多说了,强制的要记好,别认为是在瞎说,以上强制13条,均摘自阿里巴巴开发手册!
列一下OOP规约,编程的时候共勉!别踏坑!相关推荐
- 阿里巴巴对Java编程【OOP规约】的规约
转载自 阿里巴巴对Java编程[OOP规约]的规约 OOP规约 1. [强制]避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可. 2. [强制]所有的 ...
- 阿里巴巴开发规范——OOP 规约
OOP 规约 [强制]避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可. [强制]所有的覆写方法,必须加@Override 注解. 说明:getObj ...
- Java基础-OOP 面向对象编程
OOP 面向对象编程 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构.强调的是具有某些特定功能的对象. 面向过程编程(Proced ...
- 当前目录下有一个文件名为 class_score.txt 的文本文件,存放着某班学生的学号、数学课成绩(第 2 列)和语文课成绩(第 3 列)。请编程完成下列要求。
练习三:当前目录下有一个文件名为 class_score.txt 的文本文件,存放着某班学生的学号.数学课成绩(第 2 列)和语文课成绩(第 3 列).请编程完成下列要求: (1)分别求这个班数学和语 ...
- 有一个m行n列的矩阵,编程求出其中值最大的那个元素,以及其所在的行号和列号。
[题目描述] 有一个m行n列的矩阵,编程求出其中值最大的那个元素,以及其所在的行号和列号.(如果最大数有多个,则显示第一个出现的数据的信息). [输入] 有多行.第1行是两个整数,m(m≤10)和n( ...
- HBase眼高手低从Shell到IDEA编程、心路笔记、踩坑过程
HBase眼高手低从Shell到IDEA编程.心路笔记.踩坑过程 HBase眼高手低 通过shell操作Hbase Foundation 在terminal中输入hbase,就可以查看hbase命令的 ...
- Python编程一定要注意的那些“坑”(九):0与False
问题描述:在编程时,经常需要单独编写一个函数用来判断某个事件是否成立,如果成立就返回正常结果,否则返回False.在主调函数中根据被调函数的返回值决定下一步的操作.这在大多数情况下是没问题的,但是有时 ...
- Python编程一定要注意的那些“坑”(八):赋值运算符=
感谢浙江工业大学李强老师遇到与本文内容有关的问题并及时和我交流. 原始问题:下面的代码执行后为什么x的值是[2, 2]呢? >>> x = [3, 5, 7] >>> ...
- Python编程一定要注意的那些“坑”(七)
已发"坑"列表:Python函数默认值参数的2个坑,Python编程中一定要注意的那些"坑"(一),Python编程中一定要注意的那些"坑" ...
最新文章
- sift线特征提取代码_Transformer 又立功了!又快(420 fps)又好的车道线检测算法
- Linux在任务栏上找不到最小化窗口的解决方法
- #51CTO学院四周年#其实、其实,我就是来吐槽的”
- 什么是功能性需求和非功能性需求
- 基于matlab 论文知网,基于MATLAB的校园图像处理与分析
- DCOS实践分享(4):如何基于DC/OS整合SMACK(Spark, Mesos, Akka, Cassandra, Kafka)
- RandomShuffleQueue '_1_input/shuffle_batch/random_shuffle_queue' is closed and has insufficient elem
- GaussDB(DWS)磁盘维护:vacuum full执行慢怎么办?
- kali linux 数据源,kali Linux msf5 连接数据库 No database support
- ORACLE虚拟索引(Virtual Index)
- python logging打印终端_python standard package:logging
- linux查看cpu核数命令,Linux系統下如何查看CPU型號、核心數量、頻率和溫度?
- 【技术分享】配置手工模式链路聚合(交换机之间直连)
- python实现广义线性模型_「原理」机器学习算法入门—广义线性模型(线性回归,逻辑回归)...
- translation exercise 3
- kdc服务器密码修改,kdc配置HA · ZHY ZONE
- 获取用户已安装的APP列表及APK安装包
- [CF936B]Sleepy Game
- PHPWIND7.3.2设置伪静态方法
- 解决关于腾讯会议黑屏问题(ThinkpadE420型号)
热门文章
- DataSet的数据并发异常处理
- CodeForces - 1373F Network Coverage(二分)
- 牛客 - Prize(bitset优化暴力)
- CodeForces - 566A Matching Names(字典树上贪心)
- 数据分析与挖掘理论-数据预处理
- 微信小程序-地图组件(map)的使用
- linux常用安装命令集锦
- 极客精神|自制机械臂!被任正非表扬的华为天才少年
- 忘掉Java并发,先听完这个故事...
- 采用Memcached实现分布式Session