关于java方法里的非空判断的疑问,谢谢
天蓬老师
天蓬老师 2017-04-17 17:57:57
0
8
328
    public static void main(String[] args) {
        String result = replaceStr("jaja");
        if (result != null) {            //在这里又要判断下非空
              int count = 50 + Integer.parseInt(result);
        }
    }
    
    public static String replaceStr(String tem){
        String result;
        if (tem == null) {
            result = null;
        } else {
            String substring = tem.substring(0, 1);
            result = substring;
        }
        return result;
    }

如上代码,我的疑惑时,当参数tem为空,方法返回null,那岂不是又要在调用replaceStr这个方法的地方又要判断次返回值是否为null?那这个代码看上去不是很难看,好多if(**!=null)这样的语句。

我想问的是:有没有一种设计,可以只要在一处判断非空,其他地方只要写业务逻辑就行了?

谢谢

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全員に返信(8)
Ty80

あなたの質問は少しわかりにくくて、何を質問したいのか理解できません。

いいねを押す +0
黄舟

まず第一に、あなたのコードは間違っています

リーリー

if (tem == null)
第二に、このように変更したとしても、まだ厳密さが不十分です。tem="" の場合、else に問題が発生します。
繰り返しになりますが、2 回 null と判断するのはやりすぎです。
最後に、判決の数はビジネス ロジックに基づいています。たとえ 1 か所で判決の数が減ったとしても、他の場所では返済する必要があります。

いいねを押す +0
大家讲道理

メソッドの戻り値として null を使用しない場合は、null を検出する必要はありません。たとえば、この例では、単に「0」を返します。

いいねを押す +0
PHPzhong

通常のビジネス シナリオでは、term 入力パラメータ であってはいけないと確信している場合は、そうする必要はありません null 判断する価値があり、合理的ですnull をできるだけ早く破棄します。 空指针异常

いいねを押す +0
刘奇

ビジネスロジックを厳密に設計することで空でない判定を減らすことはできますが、コードの保守による歪みは保証できません。そのため、コードの堅牢性を考慮して、使用する前に判定することをお勧めします。散在したコード str == null || "".equals(str) が見苦しい場合は、独自のパッケージ化ツールを使用するか、Apache の StringUtils などのオープン ソース ツールを使用できます。

いいねを押す +0
PHPzhong

コードを変更しました:

リーリー

まず、null でないことを判断するというビジネス要件は避けられません。または、設計時にデフォルト値を追加し、戻り値が null の場合はデフォルト値を使用することもできます (具体的な状況は、null に遭遇するビジネスによって異なります)。値、次に何をするか、デフォルト値を使用するか、例外をスローするか、実行を終了するかなど)。

デフォルト値の使用については、guava の MoreObjects#firstNonNull を参照してください。

java8 のオプションは、この null 判定の問題を解決することです (実際、判定は依然として避けられませんが、NullPointerException を回避する別の方法にすぎません)。こちらもご覧ください。

さらに、Ctrl+C Spring の StringUtils#replace メソッドを直接提供します (同じ理由で、Apache Common の StringUtils を参照することもできます。とにかく、Java の世界には StringUtils が不足していません)。他の人がそれを実装する方法を参照してください。

リーリー
いいねを押す +0
Peter_Zhu

個人的なアプローチ:

  1. null を返す必要がない限り、null 値を返さないでください [「クリーン コード」にもこれが記載されています]

  2. null が返されない場合、方法 1: NPE を直接スローします。方法 2: Optional を使用します (これにより、!=null チェックを忘れることを防ぐことができ、同時にどこよりもエレガントに見えます!=)

いいねを押す +0
刘奇

このコードは意味がありません

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート