今天理解的一条编程规范:检测变量的有效性

  今天在android应用中完成一项遍历文件夹的功能。方法参数为文件夹文件夹路径。

  开始的代码如下:

  private void recursiveDir(String root) {
    File file = new File(root);
    File [] subFiles = file.listFiles();

    for(int i=0; i<subFiles.length; i++) {
         recursiveDir(subFiles[i].getAbsolutePath());
       }
  }

   运行后即在  for(int i=0; i<subFiles.length; i++) 报出空指针错误。于是在前面加上判空语句,if(subFiles == null) return;

   但是subFiles为什么为空呢?打印出 root 是正确的啊!纠结了一翻后发现 root目录已经被我误删了。我才意识到犯了大错,

   用变量前没有检测。于是进行如下修改:

    private void recursiveDir(String root)
    {
        File file = new File(root);
        
        // 检测 参数 的有效性
        if (null == file)
        {
            Log.d(TAG, root + " is not a path");
            return;
        }

        // 检测 文件是否存在
        if (!file.exists())
        {
            Log.d(TAG, "file not exist!");
            return;
        }

        if (file.isDirectory())
        {
            File[] subFiles = file.listFiles();

            // 检测 subFiles 是否正确
            if (null == subFiles)
            {
                return;
            }

            for (int i = 0; i < subFiles.length; i++)
            {
                recursiveDir(subFiles[i].getAbsolutePath());
            }
        }
        else
        {
            // do something
        }
    }

之后与同事讨论这个问题,同事说在C语言中,为了保证效率,经常不检测参数的有效性,要靠上层传递有效的参数。
   看来在编程中要在效率与健壮性上做好协调。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值