15

データベースにクエリを実行してデータを取得するコードを書いています。sで構成されるクラスがいくつかありますがList、リストまたはその他の属性を開始できず、その値がである場合があるため、属性を使用する前にornullを記述する必要があります。list!=null || list.isEmptyattribute != null

残念ながら忘れがちで、属性を操作するたびにそれをするのは本当に醜いと思います。それを説明するためにいくつかのコードを書きます。

public class SpotVo {
    private Double avg;

    private String brief;

    private ArrayList<HotelVo> hotels;

    private int id;

    private ArrayList<byte[]> images;

    private AddressVo location;

    private String name;

    private ArrayList<RestaurantVo> restaurants;
}

ご覧のとおり、このクラスにはいくつかのリストやその他の属性があり、すべてがnull空の場合もあります。それを回避するために何かできることはありますか?

4

4 に答える 4

1

これを解決する最も簡単な方法は、CollectionUtils.isEmptyを使用することです。

戻り値: 空または null の場合は true

このように、1行で実行できます。

「属性」に関して言えば、これに役立つ設計パターンがあります。または、 Guava の Optionalクラスを使用できます。詳細については、こちらを参照してください: What's the point of Guava's Optional class

于 2013-05-25T02:13:54.807 に答える
0

オブジェクトが であるかどうか、nullおよび/またはそれが String であるかどうかをチェックする関数を作成できます""。次に、すべての条件をチェックする必要があるたびに、その関数を呼び出すだけです。ブール値を返して、ifステートメントに挿入できるようにします。

boolean check(Object o)
{
    if (o != null)
        {
            if (o instanceof String)
            {
                if (((String) o).equals(""))
                    return false;
            }
            return true;
        }
        return false;
}

これをより適切に実装するには、コメントで rcook の提案を参照してください。

于 2013-05-25T02:11:39.023 に答える
0

ここには 2 つの問題があると思いますnull。問題はnull、これが Java 言語のネイティブであることです。そのため、これを少し良くする唯一の方法は、Steve P と tieTYT が言及したようなメソッドを使用することです。ただし、null を使用しないことで null を処理する別の方法があります。もちろん、完全に回避することはできませんが、少なくとも独自のコードでは、すべての参照を削除する必要がありますnull。ここでは説明しませんが、詳細については、 Avoiding != null ステートメントを参照してください。

Java ベースの言語である Scala に興味がある場合は、値が存在するかどうか (値と等しいnull) を判断できる Option クラスを実装することで、これをうまく開発しました。それについての素晴らしいブログ投稿: http://jim-mcbeath.blogspot.fr/2008/10/avoiding-nulls.html

null の問題を (ほとんど) 片付けたので、次の問題は、isEmptyコレクションを使用するときのチェックまたは類似の問題です。おっしゃるとおり、これはお尻の痛みです。しかし、実際には、これらのチェックはほとんど回避できることがわかりました。もちろん、それはすべて、コレクションをどうする必要があるかによって異なりますが、ほとんどの場合、コレクションはなんらかの方法でトラバースまたは操作するために使用されます。Java で foreach-loop を使用すると、コレクションに何もない場合は何も実行されません。きちんとした。

コレクションを空にしてはいけない場合があります。ただし、これらのいくつかは、適切な設計 (たとえば、空のリストを許可する、空のリストがないことを保証するなど) を使用することで回避できますが、残りの場合は回避策がありません。これまで。しかし、ヌルチェックを排除したので、時々いくつか呼び出すことisEmptyはそれほど悪くありません:-)

それが役に立ったことを願っています。

于 2013-05-25T02:42:26.350 に答える