8

JavaBeans メソッドの署名は、set.../get... などの特定の規則に従う必要があります。それらには is の規則があります...たとえばisEven()、ブール値をテストするための Integer クラスのメソッドである可能性があります。しかし、なぜ has... も正当な識別子ではないのだろうかと思います。なぜなら、たとえばhasCar()Person クラスなどのために何かが持っているものをテストするのは理にかなっているからです。

私の質問わかりますか?どう思いますか?

4

3 に答える 3

5

さて、一般的な慣習は使用することget...でありset...、したがってis...ブール値の単なる例外です。慣例は簡単です。is...ブール値を返す必要があり、ゲッターをスキップでき、対応するセッターもブール値パラメーターを取ります。

の規則はhas...もっと難しいhas...でしょう:ブール値を返しますが、それでも異なるタイプを扱うゲッターとセッターが必要です。したがって、JavaBeans規則のその部分は通常、ゲッターに関するものであり、セッターはそこに収まらないため、これにhas...代わるものではありません。get...is...has...

JavaBeans仕様から:

プロパティは、JavaBeanの個別の名前付き属性です。

プロパティはさまざまな方法で表示されます。

  1. ..。
  2. プロパティには、 getterメソッド とsetterメソッドを呼び出す他のコンポーネントからプログラムでアクセスできます(以下のセクション7.1を参照)。
  3. ..。

を使用してアクセスされているプロパティhas...は、永続的ではなく、getterメソッドによってアクセスされません。

例:人がcarプロパティを持っている場合、getCar()アクセサが必要です。hasCar()派生プロパティにはまたhasCarはという名前のアクセサーが必要になるため 、アクセサーにはなりgetHasCar()ませんisHasCar()hasがアクセサプレフィックスである場合、プロパティの名前は競合しますcar

于 2012-08-13T13:15:59.973 に答える
1

get/setis/setブール型の場合は単なる規則です。getter を呼び出す方が読みやすい場合があることに同意しますhasSomething。たとえばhasChildren()。しかし、先に進んで、メソッドcanWrite()などを呼び出しても問題ないとしましょう。そのような名前を使用できますが、これらの名前は Java Bean の規則に従っていないため、Java Bean フレームワークによってゲッターとして認識されません。willFly()providesResult()

Java Beans は何年も前に発明されました。@Setterおそらく、注釈とを定義することは悪い考えではありません@Getter。これらのアノテーションが一般的になれば、すべての Java Bean フレームワークがそれらをサポートできるようになり、プログラマーは必要に応じて getter を呼び出すことができるようになりますが、アノテーションでマークを付けることができます@Getter。ただし、そのような注釈は現在サポートされていないため、既存の命名規則に従うことをお勧めします。

于 2012-08-13T13:27:59.013 に答える
0

これは決して悪い質問ではないと思います!私もそれについて考えてみたところ、人々はあなたが意図したようにそれを使用していることがわかりました。ほとんどのライブラリ(おそらく使用するライブラリなど)がそうではないというだけです。

ブール値のプロパティに対して有効であることに同意します。

于 2012-08-13T13:15:29.563 に答える