2009-07-13 10 views
15

クラスに "blah"という名前の変数が含まれている場合、標準のgetter/setter構文は明らかにgetBlah()とsetBlah()です。POJOクラスの "is"変数getter/setterの正しい構文は何ですか?

public type getIsBlah() { 
    return isBlah; 
} 

public setIsBlah(type isBlah) { 
    this.isBlah = isBlah; 
} 

をそれとも、これを次のようになります。私は、isBlahという名前の変数にPOJOクラスを持っている場合しかし、私は使いますか?

public type isBlah() { 
    return isBlah; 
} 

public setBlah(type blah) { 
    this.isBlah = blah; 
} 

最初はPOJOの規約により厳密に適合するようだが、第二のタイプは、IntelliJのは、私はクラスのゲッター/セッター(とちょっとを作ってそれを求めるなら、IntelliJのはまだ私を失望させたことのない生成するものです:])。だからそれは好ましい構文ですか?

答えて

20

プロパティを使用する1つの理由は、APIを実装から切り離すことです。言い換えれば、あなたのプライベート変数が呼ばれるものに縛られるべきではありません。それは、コードのメンテナに読めるようにすることを超えて命名を知らせるべきではありません。

"type"がbooleanの場合は、2番目の形式が正しいと言います。 booleanでない場合は、getXXXを使用する必要がありますが、おそらくgetIsXXXは使用しません。私にとって、 "is"はブール値のプロパティと非常に強い対応関係があり、他のコンテキストで使用すると、JavaBeansの規約(他のツールに影響する可能性があります)が破られるだけでなく、誤解を招くIMOになります。

+3

+1 JavaBeans規約を破ってください。 –

+5

@Vincent:「JavaBeansの規約を破ると言われて+1します。 :) –

3

POJOには厳しい慣習があるとは言えませんが、JavaBeansの場合、2番目の(IntelliJ)の例はブール値属性の標準であり、その他はすべてgetXです。

2

また、2番目のオプションを選択します。最初は、getIsBlah()と冗長で冗長なようです。

1

"get"と "is"の両方は実際にはJavaBeansの規約の下で技術的に受け入れられるので実際には問題ありません。あなたの "愚か者"が実際にどのような言葉になっているかに応じて、私はより良いまたはより自然に聞こえるようになります。

3

JSTLを使用する場合、JSTL ELがそれらを認識しないという "is"構文に大きな問題があります。かなり愚かですが、JSTL ELのデザイナーは、javabeansのコンプライアンスのロジックを確認するのに煩わされませんでした。

JSTLにフックを与えるために、isBlah()を呼び出すビューレイヤークラスにgetIsBlah()メソッドを記述していることがよくあります。それは恐ろしいです。

+1

この問題は、最新のJSTLで引き続き発生しますか? –

+0

私はそれを信じていますが、JSTL自体よりもJSP ELにはもっと問題があります。 – skaffman

+0

私はもうそれが事実ではないと確信しています。 – harmanjd

4

フィールドの名前は、JavaBean specificationとは完全には無関係であることに注意してください。ゲッター/セッターの名前のみが適切です。

通常、ゲッターの名前はget<PropertyName>()です。代わりに、booleanプロパティの場合にのみis<PropertyName>()が許可されます。

ゲッターisBlah()を呼び出すと、Beanのプロパティ名は "Blah"で、ゲッターを呼び出すと "IsBlah"となることに注意してください。getIsBlah()

個人的に私は通常isBlah()を好んでいます。

0

JSTLでは、isMyBoolがブール値であり、ブール値ではなく、ブール値でもその他のオブジェクトでもあれば、Bean仕様に準拠しています。 (プリミティブ対オブジェクト)。

0

これは、JAXBが誤ったコードを生成することを意味します。 Booleanプロパティを作成します。なぜなら、それらはヌル可能である必要があるからですが、Bean仕様に違反するゲッターの名前はisXXX()です。

関連する問題