栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

FindBugs-IDEA汇总(整理中)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

FindBugs-IDEA汇总(整理中)

主题001:低效使用keyset迭代,应该使用entrySet迭代

(Inefficient use of keySet iterator instead of entrySet iterator)

总结:

1,当遍历map,同时要获取key 和value时,推荐使用entrySet

示例功能与代码:

 Map userMap = new HashMap<>(16);
 //填充数据
 //进行遍历key  和value,组装数据
 for (Integer key : userMap.keySet()) {
    list.add(new Test(key, userMap.get(key)));
 }`

优化后代码:

 Map userMap = new HashMap<>(16);
	 //填充数据
	 //进行遍历key  和value,组装数据
	 for (Map.Entry entry : userMap.entrySet()) {
     list.add(new TestData(entry.getKey(), entry.getValue()));
      }

为什么说,这种情况下,keyset效率会低点,
可以简单理解为,keyset是先遍历查询到key ,再用key去查询value
而entrySet是在找到key的时候,顺带着把value也带出来了。

主题002: 本地变量存储了闲置不用的对象

(dead store to local variable)

总结:

1,不要写多余的代码,不要声明多余的变量;

2,当需要删除业务代码时,记得把不再使用的变量也一并删除

3,在一定程度上,也可以防错,例如明明一个要用的变量,但并没有被使用,说明,要不漏写代码了,要不就某个地方写错了

示例功能与代码:

   public static void test20200310() {
 //本地变量存储了闲置不用的对象
 //dead store to local variable
 Integer num1 = 88;
 Integer num2 = 99;
 System.out.println(num2);
    }

方法中有2个变量,num1,num2, 但num2有使用,num1声明后并没有被使用,所以

Integer num1 = 88; 

这行代码要删除掉

主题003: 无用的对象被创建

(Useless object created)

总结:

1,和“本地变量存储了闲置不用的对象”还是有区别的,一个是只是被创建了,但一直就没用到,这个侧重于该对象被创建,也有使用,但实际无实际价值

2,每一行代码要有它本身的价值

示例功能与代码:

	public Result selectStartEqpByTaskId(@RequestBody MoTaskIdParam param) {
 EqpNameListRes res = new EqpNameListRes();
 String eqpNameList = moTeamTaskService.selectStartEqpByTaskId(param, getUser());
 res.setEqpNameList(eqpNameList);
 return Result.ok(eqpNameList);
    }

优化后代码:

public Result selectStartEqpByTaskId(@RequestBody MoTaskIdParam param) {
 String eqpNameList = moTeamTaskService.selectStartEqpByTaskId(param, getUser());
 return Result.ok(eqpNameList);
    }

上面的代码是一个查询方法,但可以看到方法体中的第一行代码实例化了一个EqpNameListRes,第三行也有使用,但实际返回时,和这个对象并没有关系。

主题004: 忽略了方法的返回值

(Method ignores return value)

总结:

1,准确使用方法,同时要细心

示例功能与代码:

public static  void test20200313(){
 //忽略了方法的返回值
 //Method ignores return value
 String replaceTest="aaaabbbcccaaa";
 //把 b 改为 B
 replaceTest.replace("b","B");
 //输出replaceTest变没变
 System.out.println(replaceTest);

 //把 b 改为 B,并接收
 replaceTest= replaceTest.replace("b","B");
 //重新输出replaceTest变没变
 System.out.println(replaceTest);
    }

输出结果:

aaaabbbcccaaa
aaaaBBBcccaaa

可以看到第一次输出,字符串本身并没有改变,第二次输出,才改变了。因为replace方法是返回了一个新对象,而不是直接修改字符串本身。
因此,在使用系统方法时,注意是否有返回值,是否是直接改变他本身

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号