加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

[经验] 关于 Java 中的非空判断

发布时间:2020-12-15 07:55:59 所属栏目:Java 来源:网络整理
导读:在写项目的时候,遇到一个问题 假设有一个控制层接口为: @ResponseBody @RequestMapping(value = "test",method = RequestMethod.GET,produces = "application/json;charset=UTF-8" ) public ResultString test(String user,String number,String time){ Stri

在写项目的时候,遇到一个问题

假设有一个控制层接口为:

    @ResponseBody
    @RequestMapping(value = "test",method = RequestMethod.GET,produces = "application/json;charset=UTF-8")
    public Result<String> test(String user,String number,String time){
        String type="error";
        try{
            rType = SendType.create_send.toString();
            return firstSendService.createSend(type,uName,pNum,time);
        }catch (Exception ex){
            LOGGER.error(ex.getMessage(),ex);
        }
        return Result.failure(type,"fail of connect");
    }

前端在调用这个接口的时候,并没有传递参数,于是? user,number,time 就默认为 null.

然后在服务层,有一个方法

    public Result<String> createSend(String type,String user,String time) throws Exception {
        String token = "not fond";
        try{
            if(user.isEmpty() && StringUtils.isBlank(user)){
                return Result.failure(type,"user is not null");
            }
            StringBuffer stringBuffer = new StringBuffer();
            stringBuffer.append(user).append(time);
            String signChar = stringBuffer.toString();
            token = TokenUtil.sign(signChar);
        }catch (Exception ex){
            LOGGER.error(ex.getMessage(),ex);
        }
        return Result.success(type,token);
    }

其中,关于参数的验证中?

if(user.isEmpty() && StringUtils.isBlank(user)){
    return Result.failure(type,"user is not null");
}

这里的判断条件并未被执行,去验证了一下?

?

?

换了一种方法

?

? ??

然后再来看看?StringUtils.isBlank();

?

再把 null 变成 "" 试试,

?

也没什么问题,那么再来试试看?StringUtils.isNotBlank();

如上图所示,?isNotBlank() 的判断是跟?isBlank() 反过来的.

于是,得出一个结论:

(0)? 对于??isEmpty(),当字符串为 "" 时,return true; 但是?isEmpty() 不能用于判断为 null 的字符串,会报 空指针异常 的错误,

所以 isEmpty()? 更适合写? if(str == "" && str.isEmpty()) { return }

?

(1) 相较于?isEmpty()? 只能判断 "" 的字符串,?isBlank() 的功能性要更大更完善一些,当字符串为 null 时,isBlank()? 为 true; isNotBlank() 则跟?isBlank() 相反,为 false.

所以?isBlank()? 更适合写 if( str == null && StringUtils.isBlank(str)){ return }? 或者??if( str == "" && StringUtils.isBlank(str)){ return }?

?

但是

这样是不行的,看来 isBlank() 好像看起来要更加全能一些,因为有时候参数有可能为 null,也有可能为"",用?isBlank() 的话可以避免服务器停掉,如何优雅的抛出错误或者异常,且避免服务器的运行因此受到影响,是我在努力的一个方向,希望这些可以有些帮助

?

再补上一点?

?

这就奇怪了,话说上面的 if( a.isEmpty() || StringUtils.isBlank(a)){ } 中,|| 不是如果左边不成功就使用右边的判断条件么? 为什么会直接报错呢? 那如果是 || 的判断是先判断左边,那在 a == "" 的时候,为什么又可以成功运行??isEmpty() 这么坑的么?

?

再来一组对比

?

?

?

那还是强烈推荐使用? isBlank()? 吧,"" 和 isEmpty() 是局限性有点大,灵活性不够高,容易出事....

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读