[体験]はJavaの上で空の判断ではありません、

書くときのプロジェクトで問題が発生しました

制御層インタフェースがあるとします。

    @ResponseBody 
    @RequestMapping(値 = "テスト"、メソッド= RequestMethod.GETは、= "アプリケーション/ JSONを、文字セット= UTF-8"を生成パブリック結果の<string> 試験(文字列ユーザ、列番号、文字列の時間){ 
        文字列型 = "エラー" ;
        試す{ 
            RTYPE = SendType.create_send.toString()。
            返すfirstSendService.createSend(タイプ、のuName、PNUM、時間)。
        } キャッチ(例外例){ 
            LOGGER.error(ex.getMessage()、EX)。
        } 
        戻り Result.failure(タイプ、「接続の失敗を」)。
    }

このインターフェースを呼び出して、パラメータを渡すことはありませんでしたので、ユーザ、数、時間がNULLにデフォルト設定されますフロント。

そして、サービス層では、方法があります

    公共の結果は、<文字列>(文字列型は、文字列のユーザは、列番号は、列時間)createSend スロー例外{ 
        文字列をトークン =「好きではありません」試す{
             場合(user.isEmpty()&& {StringUtils.isBlank(ユーザ))
                 を返す Result.failureを(タイプ、 "ユーザがnullでありません" )。
            } 
            のStringBufferのStringBuffer = 新規のStringBuffer(); 
            stringBuffer.append(ユーザ).append(時間)。
            ストリングsignChar = stringBuffer.toString()。
            トークン = TokenUtil.sign(signChar)。
        } キャッチ(例外例){ 
            LOGGER.error(ex.getMessage()、EX)。
        } 
        戻りResult.success(タイプ、トークン)。
    }

前記パラメータについての検証 

もし(user.isEmpty()&& StringUtils.isBlank(ユーザ)){
     返す( "ユーザがnullでない"、タイプResult.failureを
}

ビットを検証するために、判定条件が実行されるべきではありません。ここです 

  

言い換えれば、法

     

その後)(StringUtils.isBlankを見て。

 

そして、「」ヌルになって試してみてください、

 

いいえ問題は、再度StringUtils.isNotBlankを()してみてくださいません。

上記のように、isNotBlank()の判定は、現在ISBLANK()のの変わり目れます。

そこで、我々は結論に来ます:

isEmpty()、文字列がtrueを返した場合、「」であるために(0);のisEmpty()を使用することはできませんがが、ヌル文字列を決定し、nullポインタ例外がエラーを報告します、

そのためのisEmpty()は、より適切な場合(STR == "" && str.isEmpty()){リターン}書き込みます

 

(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() 是局限性有点大, 灵活性不够高, 容易出事....

 

 

 

 

 

  

 

おすすめ

転載: www.cnblogs.com/unityworld/p/11419864.html