7

ここで使用するのに適したパターンは何ですか?

私はnullを返したくありません。それは正しくありません。

もう 1 つは、null の原因となった理由を返したい場合はどうすればよいかということです。呼び出し元が null である理由を知っている場合、いくつかの追加のことができるので、呼び出し元にそれを知ってもらい、そのように動作させたい

Public CustomerDetails getCustomerDetails(){
   if(noCustomer){    
     ..log..etc..
     return null;
   }

   if(some other bad weird condition){    
     ..log..etc..
     return null;
   }

   CustomerDetails details= getCustomerDetailsFromSomewhere();

   if (details!=null){
      return details;
   }
   else {
     ..log..etc..
     return null;
   }

}
4

7 に答える 7

8

3つの主なオプションがあると思います:

Google のGuava ライブラリを使用している場合は、 Optionalクラスも使用できます。

于 2012-12-27T10:07:13.010 に答える
3

Javaでのより自然な方法は、エラー条件で例外をスローすることです。

public CustomerDetails getCustomerDetails(){
   if(noCustomer){    
     ..log..etc..
     throw new NoSuchCustomer(customerName);
   }

   if(some other bad weird condition){    
     ..log..etc..
     throw new IllegalStateException("some other bad weird condition occurred");
   }

   CustomerDetails details= getCustomerDetailsFromSomewhere();

   if (details==null)
      throw new IllegalStateException("Failed to get customer details for "+ customerName);

   return details;
}

このメソッドgetCustomerDetailsFromSomewhere()は、nullを返す代わりに例外をスローする可能性があります。

于 2012-12-27T10:21:37.303 に答える
1

試すことができます。

CustomerDetails details = setDetailsToEmpty();

または同等のもの。

null または空の顧客の詳細を確認する必要があります。

于 2012-12-27T10:08:04.343 に答える
1

Google Guava Optionalを使用します。

これは役に立ちます。

プログラマーが null を使用するケースの多くは、何らかの不在を示すために使用されます。おそらく、値があった可能性がある場合、値がないか、または値が見つからなかった可能性があります。たとえば、キーの値が見つからない場合、Map.get は null を返します。

オプションは、null 許容 T 参照を非 null 値に置き換える方法です。Optional には、null 以外の T 参照が含まれるか (この場合、参照は「存在する」といいます)、何も含まれない場合があります (この場合、参照は「存在しない」といいます)。「null を含む」とは決して言われません。

Optional<Integer> possible = Optional.of(5);
possible.isPresent(); // returns true
possible.get(); // returns 5
于 2012-12-27T10:07:09.280 に答える
1

Guava's Optional をお試しください。null の回避に関するこの記事を参照してください: http://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained

于 2012-12-27T10:05:55.780 に答える
1

本当に null が必要ない場合は、特別な CustomerDetails オブジェクトを作成します

...
        public static final CustomerDetails EMPTY_CUSTOMER_DETAILS = new CustomerDetails();
...    
        public CustomerDetails getCustomerDetails(){
            ...
            if (details!=null){
                return details;
            }
            ...
            return EMPTY_CUSTOMER_DETAILS;
于 2012-12-27T10:12:36.387 に答える