几个常见findbugs问题

1、USFW_UNSYNCHRONIZED_SINGLETON_FIELD_WRITES 加锁
2、WEM_WEAK_EXCEPTION_MESSAGING 日志记录详细

     比如日志记录如下,log.info("file not found."),这个信息很抽象,我们需要增加具体哪个文件找不到的信息,log.info("file {} not found.", file)。必须通过变量替换的方式在日志中增加可变信息。

3、EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC 基类有@Data注解,子类也有@Data注解
4、NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE
      desDirPath = zipPath.getParent().toAbsolutePath().toString();
      做判空处理:

if (StringUtils.isNotBlank(zipPath)) {
    String parentPath = zipPath.getParent();
    if (StringUtils.isNotBlank(parentPath)) {
    
       String absPath = parentPath.toAbsolutePath();
       if (StringUtils.isNotBlank(absPath)) {
          desDirPath = absPath.toString();
       }
    }
}

5、IS2_INCONSISTENT_SYNC 需要同步,直接在方法声明上增加synchronized关键字。
6、WMI_WRONG_MAP_ITERATOR 使用entrySet遍历

7、LSC_LITERAL_STRING_COMPARISON
      if (childProp != null && !childProp.equals("")) { // 把""提到前面

       虽然前面判断了childProp不为null,但是我们最好把这个习惯养成好,常量信息需要在开头定义,而且这里的比较需要将常量""提前。一般而言,推荐使用一些工具方法,这里StringUtils.isNotBlank(childProp)就一句代码搞定。

8、SIC_INNER_SHOULD_BE_STATIC_ANON 不要使用匿名内部类。

9、DRE_DECLARED_RUNTIME_EXCEPTION 类内部抛出了异常,方法就不要声明抛出异常。
10、UTWR_USE_TRY_WITH_RESOURCES 处理关闭一个自动关闭的资源。

      使用了try(){}catch(){}方式操作流即try-with-resources,就无须手动关闭流。

11、UCPM_USE_CHARACTER_PARAMETERIZED_METHOD 单个字符问题

Method passes constant String of length 1 to character overridden method
This method passes a constant literal String of length 1 as a parameter to a method, when a similar method is exposed that takes a char. 
It is simpler and more expedient to handle one character, rather than a String.

    在StringBuffer、StringBuilder添加字符串操作中,如果遇到单个字符串,比如" " 或者"a",如果还是使用sb.append("")或者sb.append("a"),一般会推荐使用sb.append('')或者sb.append('a')来代替,虽然两个方法类似,但是还是有区别的,一个是字符串,一个是字符。在使用字符串indexOf()方法的时候,也类似,如果是单个字符串,也推荐使用字符的方式来查找索引。

猜你喜欢

转载自blog.csdn.net/feinifi/article/details/131737461