idea 阿里巴巴规范插件_如何使用牛逼的插件帮你规范代码

前言

阿里巴巴将《阿里巴巴Java开发手册》文档进行了升级,在2017年10月14日杭州云栖大会,Java代码规约扫描插件全球首发仪式正式启动,规范正式以插件形式公开走向业界,引领Java语言的规范之路。使用该插件进行扫描工程,可以扫描出Blocker/Critical/Major三个等级的隐患代码,在Snoar中对代码规则有五个级别,这是前三个,翻译下就是:崩溃/严重/重要,也就是说前两级别是必须要处理掉的。同时还会给出修改意见。可以说不但规范了代码,也带你避免掉了一些潜在的bug。

一、IDEA如何安装阿里巴巴代码规范插件

1. 启动IDEA >> File >> Settings >> Plugins,搜索Alibaba Java Code Guidelines(阿里巴巴Java代码指南)插件,点击Install进行安装。

8a1fb521d398131bfce92c8e373574d4.png

2. 安装好重启IDEA,之后生效。需要注意的是插件基于JDK1.7打包,如果IDEA启动时使用的JDK版本是1.6的话就会报Unsupported.major.minor version 51.0异常,所以建议大家升级一下。

8abbeadd93dbc9b8e3e8274f1d933a97.png

3. IDEA重启之后点击工程右键,或者使用默认快捷键Ctrl+Shift+Alt+J来扫描你的工程吧。看看你的代码有多少不规范的地方呢。

7a0d8815632972df55a223a9475f1a46.png

4. 也可以点击具体的某个类右键进行扫描。

a611613a0b88b282693ede7283f9eca2.png

5. 扫描整个工程,将不符合规约的代码按 BlockerCriticalMajor三个等级显示,右侧窗口还有针对代码的批量修复功能。

c5f26d03f948775179347be2cd574577.png

6. 实时检测功能,在开发时,对当前文件实时进行检测,并高亮显示出来,同时也给出修改提示。可以说是非常好用了。

d77a3a444007fad73c7b31733725d3b3.png

7. 关闭实时检测功能

如果你正在阅读一些代码,恰巧代码又没有按照阿里代码规范写,此时屏幕上都是一些红色、黄色的警告,严重影响阅读。这个时候可以右击工程点击关闭实时检测的功能。

7fcbc936b4adc0f1a88f901111163b23.png

8. 或许阿里条约有些并不适合自己团队的开发要求,这也不需要担心,因为也可以单独的关闭某条规则。或者是修改其提示的级别。是不是很人性化呀。

File>>Settings >>Editor >> Inspections

be9f54a1499fe92e67a77175a380ecc6.png

二、修改不规范代码

扫描完整个工程之后发现有很多不符合规范的代码,小编就挑一些跟大家一起修改吧。

1. 不允许出现任何魔法值(即未经定义的常量)直接出现在代码中。所谓的魔法值就是,未经定义的常量字面量,所有在代码中使用的常量必须预先经过定义。

反例:

if (key.equals("zhangSan")) { //... }

建议改为:

String KEY_PRE = "zhangSan";if(KEY_PRE.equals(key)){//... }

2.Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。(是不是有的小伙伴没有注意过这个问题?)

反例:

public void f(String str) { String inner = "hi";if (str.equals(inner)) { System.out.println("hello world"); } }

建议改为:

public void f(String str) { String inner = "hi"; if (inner.equals(str)) { System.out.println("hello world"); } }

3.所有的覆写方法,必须加@Override注解。

其实Override注解的本身并没有什么作用,但是它可以告诉代码的读者,这个是覆盖父类的方法。如果方法名、参数、异常定义错误,导致不能正确覆盖父类的方法,编译器会提示错误。比如getObject与get0bject的问题。一个是字母的O,一个是数字的0,加@Override可以准确判断是否覆盖成功。所以在意细节还是很重要的。

4. 事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚事务。 反例 (注解【Transactional】需要设置rollbackFor属性。):

@Service@Transactionalpublic class MechanicalInformationService {}

建议改为:

例子一:

@Service@Transactional(rollbackFor = Exception.class)public class UserServiceImpl implements UserService {@Overridepublic void save(User user) { }}

例子二:

@Servicepublic class UserServiceImpl implements UserService {@Override@Transactional(rollbackFor = Exception.class)public void save(User user) { }}

例子三:

@Servicepublic class UserServiceImpl implements UserService {@Autowiredprivate DataSourceTransactionManager transactionManager;@Override@Transactionalpublic void save(User user) { DefaultTransactionDefinition def = new DefaultTransactionDefinition; def.setName("SomeTxName"); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); TransactionStatus status = transactionManager.getTransaction(def);try { } catch (Exception ex) { transactionManager.rollback(status);throw ex; } }}

5. 循环体内,字符串的连接方式,使用StringBuilder的append方法进行扩展。

说明:反编译出的字节码文件显示每次循环都会new出一个StringBuilder对象,然后进行append操作,最后通过toString方法返回String对象,造成内存资源浪费。(这一点是需要十分注意的,看完之后不要再用 + 连接字符串了哦)

反例:

String result;for(String string:tagNameList){ result=result+string;}

建议改为:

StringBuilder stringBuilder = new StringBuilder;for(String string:tagNameList){ stringBuilder.append(string); }String result=stringBuilder.toString;

6. 除常用方法(如getXxx/isXxx)等外,不要在条件判断中执行复杂的语句,将复杂逻辑判断的结果赋值给一个有意义的布尔变量,以提高可读性。

说明:很多if语句内的逻辑相当复杂,阅读者需要分析条件表达式的最终结果,才能明确什么样的条件执行什么样的语句,那么,如果阅读者分析逻辑表达式错误呢? 反例:

if((file.open(fileName,"w")!=)&&(...)||(...)){// ... }

建议改为:

boolean existed=(file.open(fileName,"w")!=)&&(...)||(...);if(existed){//...}

7. 集合初始化时,指定集合初始值大小。

说明:HashMap使用如下构造方法进行初始化,如果暂时无法确定集合大小,那么指定默认值(16)即可。反例:

Map map = new HashMap;

建议改为:

Map map = new HashMap(16);

大家可以将《阿里巴巴Java开发手册》下下来认真阅读。这都是阿里技术精英经过实战不断完善的经验总结,可以很好的帮我们规范Java编码,提高Java开发质量和效率、同时大大降低了代码的维护成本。让程序员码出更优质的代码。将不符合规范的代码修改,逐步养成良好的编码习惯!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!针对您提到的阿里巴巴规范插件,我可以给您一些建议和想法。阿里巴巴规范插件可以助开发者在代码编写过程中遵循阿里巴巴编码规范,提高代码的质量和可维护性。以下是一些可能的想法: 1. 代码风格检查:插件可以集成阿里巴巴代码风格规范,并在开发过程中对代码进行静态分析和检查,以确保代码符合规范要求。这可以通过使用静态代码分析工具如PMD、Checkstyle等来实现。 2. 自动修复:插件可以提供自动修复功能,当开发者的代码不符合规范时,插件可以自动修改代码以符合规范要求。这可以减少手动修改的工作量,并助开发者快速纠正错误。 3. 代码提示和建议:插件可以提供代码提示和建议,助开发者在编写代码时遵循阿里巴巴规范。例如,当开发者在使用一个不符合规范的方法时,插件可以给出警告并提供替代的规范方法。 4. 文档和示例:插件可以集成阿里巴巴规范文档和示例代码,方便开发者查阅和学习。这可以助开发者更好地理解规范要求,并在编码过程中参考示例代码。 5. 整合开发环境:插件可以与常用的集成开发环境(IDE)进行整合,如Eclipse、IntelliJ IDEA等,提供方便的界面和交互体验。开发者可以在IDE中直接使用插件的功能,而不需要切换到其他工具。 这些只是一些初步的想法,具体的实现方式可以根据您的需求和使用场景来进一步探讨和细化。希望对您有所助!如果您有更多问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值