android的Findbugs问题整理

1. 对字符串不相等的判断

  • 错误
if (chapterInfo.getPayMode()
!= String.valueOf(com.shuqi.base.common.Constant.PAYMODE_BOOK) && chapterInfo.getPayMode() !=
        String.valueOf(com.shuqi.base.common.Constant.PAYMODE_CHAPTER)
&& drawType == DrawType.DRAW_COUNT_DOWN_TYPE) {
    mRenderData.setDrawType(DrawType.DRAW_LOADING_TYPE);
}
  • 正确
if (!String.valueOf(com.shuqi.base.common.Constant.PAYMODE_BOOK).equals(chapterInfo.getPayMode())
&& !String.valueOf(com.shuqi.base.common.Constant.PAYMODE_CHAPTER)
        .equals(chapterInfo.getPayMode())
&& drawType == DrawType.DRAW_COUNT_DOWN_TYPE) {
    mRenderData.setDrawType(DrawType.DRAW_LOADING_TYPE);
}

或者调用 TextUtils.equals() 方法

2. 典型数组越界

android的Findbugs问题整理

android的Findbugs问题整理

3. 创建文件夹判断返回值

在创建文件时,虽然判断了文件不存在再创建,但未处理创建失败的情况,会有不可预知的错误,应该处理下创建失败的情况(但不是一味的try),应给外部返回相应的错误码。

4. 创建单实例,保证线程安全

public static DownFileManager
getInstance() {
    if (mInstance
== 
null)
{
        mInstance
new DownFileManager();
    }
    return mInstance;
}
  • 正确的做法是:
public static DownFileManager
getInstance() {
    if (mInstance
== 
null)
{
        synchronized (DownFileManager.class)
{
            if (mInstance
== 
null)
{
                mInstance
new DownFileManager();
            }
        }
    }
    return mInstance;
}

public synchronized static DownFileManager
getInstance() {
    if (mInstance
== 
null)
{
        mInstance
new DownFileManager();
    }
    return mInstance;
}

5. 关于弱引用

使用SoftReference.get()可能会有空指针异常, 必须 对返回值进行判断

6. 分支执行代码相同(DB_DUPLICATE_BRANCHES)

这个就是if-else分支中执行的代码是一样的,一种好的编程实践就是在写if时,一定要考虑到是否需要else分支,某些团队要求有if分支,就必须要有else分支,哪怕else分支什么也不做。

7. 需要float或double类型变量,除法运算分子或分母需要一个float或double

8. switch要实现default(SF_SWITCH_NO_DEFAULT)

9. 静态变量尽量final,若需要赋值操作,降低可见性设置set/get方法

不允许直接访问一个变量,必须提供对应的方法来访问,这是一个强制性的规约。静态常量请一定要添加 final 关键字。

10. float与double类型值判断相等的问题

android的Findbugs问题整理

android的Findbugs问题整理

请使用Utility.floatEquals方法来判断

public static boolean floatEquals(float a, float b)
{
     return Math.abs(a
- b) < .
0000001;
}
上一篇:Navicat for MySQL出现1030-Got error 28 from storage engine错误


下一篇:【三】php 数组