検索
ホームページJava&#&チュートリアルJavaで空判定を実装する方法

    1. はじめに

    実際のプロジェクトではnull検証が必要な箇所が多く、null検証を行わないとNullPointerExceptionが発生する可能性があります。 。

    まずは実際のプロジェクトでの null 判定方法をいくつか見てみましょう

    Javaで空判定を実装する方法

    if (ObjectUtil.isNotNull(vo.getSubmitterId())) {
        userIds.add(vo.getSubmitterId());
    }
    if (StringUtils.isNotBlank(vo.getBudgetPM())) {
        userIds.add(Long.valueOf(vo.getBudgetPM()));
    }
    if (CollUtil.isNotEmpty(vo.getOriginatorList())) {
        userIds.addAl1(vo.getOriginatorList().stream();
    }

    通常、オブジェクトが Null かどうかを判定しますが、java.util の Objects を使用できます。 .nonNull(obj)、hutool の ObjectUtil または直接 null != obj

    2. List の Null 判定

    List のような特殊な項目は、空のプロジェクト内の非 null を判定するだけではありません。 List の場合、null に等しくなく、List.size() は 0 に等しくありません。2 つの異なる点があります。社内のインターンはこれら 2 つをよく混同します。list が null に等しくない場合は、リストが null に等しくないことを意味します。初期化されており、それに属するヒープ メモリの一部があります。サイト、およびサイズ 0 は、そこに何も置かれていないことを意味します。たとえば、null に等しくない場合は、現在ボトルがあることを意味します. サイズが 0 より大きい場合は、ボトルに水を入れたことを意味します。

    実際のプロジェクトでは list.isEmpty() を直接判定に利用していることも分かりましたのでソースコードを見てみます:

    public boolean isEmpty() {
        return size == 0;
    }

    これは水の有無を判定するのと同じですボトル内 (ボトルがすでに存在する場合、ボトルが存在しない場合は NullPointerException がスローされます)。

    そのため、通常 list != null && list.size > 0 を判定に使用するか、HuTool の CollUtil ツールの isEmpty を直接使用します。 Set や Map などもあります。

    3. 文字列の null 判定

    ここではボトルや水の概念がそのまま使われており、String が null の場合は、equals(String) やlength() が呼び出され、java.lang.NullPointerException がスローされます。

    Javaで空判定を実装する方法

    空の文字列を検出するにはいくつかの方法があります:

    1. ほとんどの人が使用する方法の 1 つで、直感的で便利ですが、非効率的です:

    if(a == null || a.equals(""));

    2. 文字列の長さを効率的に比較します:

    if(a == null || a.length() == 0);

    3. Java SE 6.0は提供が始まったばかりで、効率は方法2とほぼ同じです。 :

    if(a == null || a.isEmpty());

    もちろん、org.apache.commons.lang を使用することもできます。 StringUtils ツール。

    StringUtils.isNotBlank(a);

    * StringUtils.isNotBlank(null) = false

    * StringUtils.isNotBlank("") = false

    * StringUtils.isNotBlank(" ") = false

    * StringUtils.isNotBlank("bob") = true

    * StringUtils.isNotBlank(" bob ") = true

    このツール クラスには isNotEmpty() メソッドもあります。この 2 つの違いは、コメントから明確にわかります。

    StringUtils.isNotEmpty(a);

    * StringUtils.isNotEmpty(null) = false

    * StringUtils.isNotEmpty("") = false

    * StringUtils.isNotEmpty(" ") = true

    * StringUtils.isNotEmpty("bob") = true

    * StringUtils.isNotEmpty(" bob ") = true

    4. Optional

    Optional の外観NullpointException を防ぐために使用されます。一般的なメソッドは次のとおりです。

    • .empty(): 空のオプションのインスタンスを作成します。

    • .of(T t): オプションのインスタンスを作成します。 nullの場合は例外が報告されます

    • .ofNullable(T t): tがnullでない場合はOptionalインスタンスを作成し、それ以外の場合は空のインスタンスを作成します

    • isPresent(): コンテナーに値があるかどうかを判断します。

    • ##ifPresent(Consume lambda): コンテナーが空でない場合は、括弧

    • orElse(T t): コンテナ内の要素を取得します。コンテナが空の場合は、括弧内のデフォルト値を返します

    • #orElseGet(Supplier s): 呼び出し元のオブジェクトに value が含まれている場合はその値を返し、それ以外の場合は s
    • によって取得された値を返します。orElseThrow(): 空の場合は、定義された値をスローします。例外、そうでない場合は、現在のオブジェクトを返します
    • map(Function f): 値がある場合は、それを処理し、処理されたオプションを返します。それ以外の場合は、Optional.empty()を返します
    • flatMap(Function mapper ): Map と同様、戻り値は Optional
    • T get(): コンテナ内の要素を取得します。コンテナが空の場合、NoSuchElement 例外がスローされます
    • まず一般的な例を見てみましょう:

    baseInfo クラスには Boolean 型の属性があります。空の場合は false を返し、空でない場合はその値を取得するため、4 行が必要になります。

    boolean blind = false;
    if (null != baseInfo.getBlind()){
        blind = baseInfo.getBlind();
    }

    Optional を使用すると、非常にエレガントな 1 行で実行できます。

    boolean blind = Optional.ofNullable(baseInfo.getBlind()).orElse( other: false);

    4.1 オプションのオブジェクトの作成

    public final class Optional<T> {
        private static final Optional<?> EMPTY = new Optional<>();
        private final T value;
        //可以看到两个构造方格都是private 私有的
        //说明 没办法在外面new出来Optional对象
        private Optional() {
            this.value = null;
        }
        private Optional(T value) {
            this.value = Objects.requireNonNull(value);
        }
        //这个静态方法大致 是创建出一个包装值为空的一个对象因为没有任何参数赋值
        public static<T> Optional<T> empty() {
            @SuppressWarnings("unchecked")
            Optional<T> t = (Optional<T>) EMPTY;
            return t;
        }
        //这个静态方法大致 是创建出一个包装值非空的一个对象 因为做了赋值
        public static <T> Optional<T> of(T value) {
            return new Optional<>(value);
        }
        //这个静态方法大致是 如果参数value为空,则创建空对象,如果不为空,则创建有参对象
        public static <T> Optional<T> ofNullable(T value) {
            return value == null ? empty() : of(value);
        }
    }

    4.2 使用シナリオ

    シナリオ 1: サービス層でオブジェクトをクエリし、返された後、それが空かどうかを判断して処理しますit

    Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
    Optional.ofNullable(task).orElseThrow(() -> new ProcessException(ErrorCodeEnum,SYSIEM ERROR));

    シナリオ 2: オプションの関数型プログラミングを使用し、1 行で完了

    Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
    Map<String,String> map = new HashMap<>( initialCapacity: 8);
    Optional.ofNullable(task).ifPresent(d -> map.put("taskId",d.getTaskDefinitionKey()));

    以上がJavaで空判定を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明
    この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    mPDF

    mPDF

    mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

    SublimeText3 英語版

    SublimeText3 英語版

    推奨: Win バージョン、コードプロンプトをサポート!

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    Dreamweaver Mac版

    Dreamweaver Mac版

    ビジュアル Web 開発ツール

    VSCode Windows 64 ビットのダウンロード

    VSCode Windows 64 ビットのダウンロード

    Microsoft によって発売された無料で強力な IDE エディター