2009-05-14 16 views
0

GWTソリューション。 (これはjavascriptにコンパイルされたjavaコードです)。 もちろんいくつかのクラスがあります。スマーターセッター?良いか悪い考えですか?

Setterで文字列フィールドのNullチェックを行うのは良い考えですか?この

public void setSomeField(String someField){ 
    if (null != someField) 
    this.someField = someField; 
    else 
    this.someField = String.Empty; 
} 

よう

何かが、これは良いか悪いアイデアですか?私がnullをチェックする必要はないので、もう一方ではおそらく私が他の文字列に対してこれをしなければならないことを忘れさせるでしょう。

思考? ありがとう

+0

補足として、String.Emptyは.NETの構造です。 Javaでは ""を使用する必要があります。 P.S.このような定数があった場合、String.EMPTYはJavaのコード規約に従います。http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html – Powerlord

+0

真実、私はちょっと忘れてしまった。(.net devはここにString.Empty構造がないので、String.IsNullorEmptyも見つからない。 ) – roundcrisis

答えて

5

あなたのアプリケーションでこのようなロジックが必要な場合、セッターはそれを置く場所です。プライベートvarを囲むget/setラップを持つ主な理由は、アクセスの周りにロジックを置くことができることです。

デフォルトにするか、デフォルトにしないかの質問に答えるには 私のアプリケーションでは、表示の理由からstring.emptyにプロパティのセットを戻すようにしました。人々はビューがこれらの可能性をカバーし、ヌルをチェックして何も表示しなくてはならないと主張することができましたが、私のページ全体には膨大な膨大さがあり、すべてのプロパティをチェックしました。

だから私はSafeXXプロパティを実装し始めました。だから私はおそらくnull値を持つことができる 'myObj.Name'を持っていたと言うと、getterにnullをキャッチして代わりにstring.emptyを返すプロパティ 'myObj.SafeName'も存在するだろう。小さな命名規則は、通常のゲッターではないことを明らかにしています。

+0

私は同意するが、私はそれが例外ではなく例外をスローする方が適切かもしれないと思う静かに入力値を捨てる。もちろん、それはアプリケーションに依存します。 –

+0

ああ、私はその点を見逃しているかもしれない。しかし、それは文脈を知らなくても私たちが答えることができない質問です。 –

0

一般に、呼び出し側(setterを呼び出す側)が実際に値をnullに設定する可能性があるため、null値をチェックすることはお勧めできません。

は、あなたがこれで「someField」のクエリとします

select * from ... where someField is null 

あなたは空の文字列として設定した場合、上記のクエリは失敗します。

+2

しかし、そのクラスのためにnullが適切かどうかを決定するのは、クラスの作成者です。したがって、プロパティに新しい値を設定するコードが本当に*本当に* nullを設定したい場合でも、そのクラスがnullで動作できないことを文書化している場合は、そのクラスの作成者はもちろん例外をスローするか、それ。 –

+0

これは、これがまさにIllegalArgumentExceptionというクラスが存在する理由であると付け加えます。 –

1

nullが本当に正当な理由""に変更する必要がある場合には、(例えば、それは「私は気にしない」を意味するかもしれないとデフォルトが""することができる)、それのために行く(それを文書化)。

NullPointerExceptionをキャッチしてこのように修正しようとしている場合のように、しないでください。呼び出し元が明らかに無効な値を使用している場合は、できるだけ早く例外を発生させて、問題の発生を通知してから完全に無関係のコンポーネントで致命的な説明できないエラーに陥る前に修正します。

3

ここには何かがあります。あなたは空の文字列にヌル値を変更し、getSomeFieldで、クライアントは今テストするときに二つの条件をチェックするために持っていることを返却している場合は、

yourClass.setSomeField(null); 
assertNull(yourClass.getSomeField()); 

?:このユニットテストは合格か不合格と期待します。.. .a文字列とnull文字列。大したことではありませんが、クラス内で20個のStringプロパティがある場合はどうなりますか?すべてのセッターの間で一貫性を持たせることをお勧めします。そうでない場合は、そのような文書だけでは分かりません。

ゲッターとセッターの周りにはいくつかの規則があります。特定の期待。オブジェクトのセッターを呼び出すと、ゲッターが私が設定したものを返すと通常思っています。私は、クラスが内部的に働くのがより便利な、私が渡したものの表現を返すとは期待していません。私はクラスの内部について気にしないし、したくない。

0

フィールドをNULLに設定しない場合は、nullに設定しないでください。

これは、設定を行っているコードを制御できない場合には良い考えですが、そうした場合、このような回避策ではなく、ソースで問題を解決する方がよいでしょう。

0

これは答えにくいです。最初の一見では、常にヌルをチェックする必要がないので、使い方を良くするようです。しかし、何も割り当てられていないことを意味するヌルの品質が失われます。 String.Emptyを行うと、誰かがあなたにString.Emptyをパラメータとして渡した場合、すでにあいまいさがあります。たぶんそれは問題ではない。

私は個人的に(もしあれば)私はセッターでそれをしません。あなたのクラスの中ではnullはそれ自身の値を持つべきです。あなたが便利な場合は、ゲッター

return (this.someField != null) ? this.someField: String.Empty; 

となります。内部的にはnullを扱いますが、外部にはより便利なメソッドがあります。

一般的に個人的には私はそれをしません。最初はよく見えて、後で多くのことを難しくします。

関連する問題