引言
入司久矣,有感而发.前人所留之代码使人备受煎熬,如屎海遨游,粪池裸泳,修改代码有种点屎成金的成就感,特此写下此篇文章,但求前人往后可以擦好屁股,莫要到处屁滚尿流
1.插件下载
阿里巴巴代码规约插件 (Alibaba Java Coding Guidelines) 代码格式规范里面都有
翻译插件(Translation) 命名时不知道英文单词可以使用上述插件在idea里快速进行翻译
实体类简化插件(lombok) 通过注解的方式在编译时自动生成get set等方法
2.文本注释
无用代码进行删除,如果只是个人学习怕忘记请写在单独的笔记上
类名方法名添加方法作用描述,创建人,创建时间,参数说明,返回值说明.可以创建模板快速创建,方法如下
打开idea的setting——>editor ——>liveTemplates
新建 templateGroup——>新建template
配置模板
1.abbreviation : *
2.TemplateText :
**
* @description: $description$
* @param $param$
$return$
* @author: your_name
* @time: $date$ $time$
*/
3.edit variables
3.1 description : methodName()
3.2 return : groovyScript("def returnType = \"${_1}\"; def result = '* @return:' + returnType; return result;", methodReturnType());
3.3 date : date()
3.4 time : time()
3.5 param : groovyScript("def result = '';def params = \"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) {if(params[i] != '')result+='* @param ' + params[i] + ((i < params.size() - 1) ? '\\r\\n\\n\\n ' : '')}; return result == '' ? null : '\\r\\n ' + result", methodParameters())
3.方法提取
单个方法长度不能超过40行
方法提取要存在意义,提取出的方法可以只专注于去做某一件事,做到可以代码加上注释说明后只了解入参是什么,返回值是什么最好
提取工具类,重复调用的方法可以封装工具类进行调用,减少重复代码
4.代码简化
Java1.8及之后推出了lamuda表达式,学习stream流简化代码
在可以的情况下使用三元表达式
5.equals字符串判断
使用equals判断时,双引号包裹的字符串应该作为调用方去进行调用
使用StringUtils工具类的方法
创建常量类,将双引号包裹的字符串放进常量类里,添加注释写明该字符串的含义
6.接口返回格式的定义
编写统一的接口返回类,可以参考若依
7.非代码因素影响变动或更改的值及键值对
(代码里写死了,要加或者改的时候就会有人想把你打死了)
编写或使用数据字典配置程序,将一些下拉列表以及状态值放到数据字典中(参考若依,大佬都给写好了你们就是只想着抄不想着学习里面的思想)
应用配置程序,将一些第三方的key或者一些api地址信息可以维护进去,需要使用时可以从缓存里取(参考若依,同样的)
8.异常处理
使用try catch时,不打印错误日志时应当将异常名称修改为ignored
try {
} catch (Exception ignored) {}
正确的关闭一些流及客户端,示例如下
/**
* 从高德地图上根据经纬度获取静态地图图片
* @param latitude 纬度
* @param longitude 经度
* @param zoom 图层
* @param savePath 保存路径
*/
private static void saveLakeImage(double latitude, double longitude, int zoom, String savePath) {
String apiUrl = "https://restapi.amap.com/v3/staticmap?" +
"location=" + longitude + "," + latitude +
"&zoom=" + zoom +
"&size=" + HEIGHT + "*" + WIDTH +
"&key=" + MAP_KEY;
HttpURLConnection connection = null;
try {
URL url = new URL(apiUrl);
connection = (HttpURLConnection) url.openConnection();
InputStream in = connection.getInputStream();
FileOutputStream out = new FileOutputStream(savePath);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
} catch (Exception ignored) {
} finally {
if (connection != null) {
connection.disconnect();
}
}
}
9.未被引用的对象
使用反射调用或者未被使用只是预留的代码可以添加@SuppressWarnings("unused")来去除阿里巴巴代码规约的校验,引用了该方法时应及时删除@SuppressWarnings("unused"),方便后期对无用代码进行删除的维护
10.线程的创建
使用hutool工具类或者Excutor去创建线程池
11.空指针校验(重点关注)
只要存在值可能为空的情况下都要进行非空校验,否则会导致异常满天飞
12.日志打印
使用log4j或其他日志框架,避免使用原生的System.out.println(),如果是只做调试一定要及时删除
需要存储的日志信息可以使用切面的方式进行切入进去,减少代码的耦合度
13.解耦合
程序设计要保持微服务可拆卸的理念,尽管你使用的是一个单体服务也要保证业务之间不应该存在粘连的代码不允许粘连在一起
同一个接口不允许使用各种if else判断分别供不同的场景使用(懒你又懒的很,写屎山代码的时候又觉得拉的不够多)
14......
还有很多需要注意的地方我这里就不继续概述了,只要你严格按照阿里巴巴代码规约去写代码,你会越来越了解这些东西的
总结
一个优秀的程序员需要一个良好的心态去面对各种奇葩需求的同时还应该对自己编写的代码存在一定的追求,解决问题的方法不是越复杂越好,而是拥有一个清晰的逻辑思维,在重重代码中抽丝剥茧写出最简洁合适的代码才是完美的处理.最后,不要为了解决问题而去解决问题,应该是解决这个问题应该使用哪个最好的方案