亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

FindBugs-IDEA匯總(整理中)

標簽:
Java

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

(Inefficient use of keySet iterator instead of entrySet iterator)

总结:

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

示例功能与代码:

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

优化后代码:

 Map<Integer, String> userMap = new HashMap<>(16);
	 //填充数据
	 //进行遍历key  和value,组装数据
	 for (Map.Entry<Integer, String> 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<String> selectStartEqpByTaskId(@RequestBody MoTaskIdParam param) {
        EqpNameListRes res = new EqpNameListRes();
        String eqpNameList = moTeamTaskService.selectStartEqpByTaskId(param, getUser());
        res.setEqpNameList(eqpNameList);
        return Result.ok(eqpNameList);
    }

优化后代码:

public Result<String> 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方法是返回了一个新对象,而不是直接修改字符串本身。
因此,在使用系统方法时,注意是否有返回值,是否是直接改变他本身

點擊查看更多內容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
13
獲贊與收藏
7

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消