Javaでゲッターとセッターを作成するより良い標準的な方法はありますか?
変数ごとにゲッターとセッターを明示的に定義する必要があるのは非常に冗長です。より良い標準的な注釈アプローチはありますか?
春にはこんなものがありますか?
C# にもプロパティがあります。
Javaでゲッターとセッターを作成するより良い標準的な方法はありますか?
変数ごとにゲッターとセッターを明示的に定義する必要があるのは非常に冗長です。より良い標準的な注釈アプローチはありますか?
春にはこんなものがありますか?
C# にもプロパティがあります。
「標準」と見なすかどうかはわかりませんが、ProjectLombokはこの問題に対処します。アノテーションを使用して、Javaの冗長性の多くを置き換えます。
GroovyやScalaなどの代替Java兄弟言語を検討している人もいます。JSRがJavaでこれを「修正」するための「標準化された」方法を理解するまでには、たとえあったとしても、数年かかるのではないかと思います。
Eclipseには、他の多くのIDEと同じように、これらを自動生成するコンテキストメニューオプションがあります。
Eclipse固有ではない注釈をいくつか作成しました。
http://code.google.com/p/javadude/wiki/Annotationsを参照してください
例えば:
package sample;
import com.javadude.annotation.Bean;
import com.javadude.annotation.Property;
import com.javadude.annotation.PropertyKind;
@Bean(properties={
@Property(name="name"),
@Property(name="phone", bound=true),
@Property(name="friend", type=Person.class, kind=PropertyKind.LIST)
})
public class Person extends PersonGen {
}
私のアノテーションはスーパークラスを生成します。Lombokはコンパイルされている実際のクラスを変更すると思います(これはSunによって公式にサポートされておらず、壊れている可能性があります-動作について間違っている可能性がありますが、私が見たものに基づいて、彼らはそれをしているに違いありません)
楽しみ!-スコット
ほとんどのIDEは、コードを生成するためのショートカットを提供します(例:Eclipse:右クリック->ソース->ゲッターとセッターの生成)。ただし、これはおそらくあなたが探している答えではないことを私は理解しています。
一部のIOCフレームワークでは、タペストリーIOCや最新のSpringなど、フレームワークのコンテキストで使用できるようにプロパティに注釈を付けることができます(ただし、この使用はフレームワークでの使用に制限されています)
この件に関する興味深い記事は次のとおりです。 http://cafe.elharo.com/java/why-java-doesnt-need-properties-it-already-has-them/
プロパティはショートカットだと思いますが、本当に重要な機能というよりも小さな機能です
可能な代替手段として、 Scalaを試しましたか? Java バイトコードにコンパイルされ、Java プログラマーとしての生活を楽にする興味深いショートカットがたくさんあります。
プロパティの例:
case class Person(var name:String,
var age:Int);
val p = Person("John", 4)
p.name
p.name = "Charlie"
p.name
そして出力:
defined class Person
p: Person = Person(John,4)
res7: String = John
res8: String = Charlie
@RooJavaBean アノテーションを持つ Spring Roo プロジェクトもあります。@RooToString や @RooHashCodeEquals などもあります。適切な方法で AspectJ ファイルをバックグラウンドで生成します。
ゲッター/セッターが冗長であることに同意します。他の人が示唆しているように、プロジェクトロンボク には良い答えがあります。それ以外の場合は、IDE の機能を使用してそれらを生成できます。
Netbeans では、getter/setter を置き換える場所で get または set と入力し始め、オートコンプリート (Ctrl+Space) を呼び出すだけで、getter または setter を生成するオプションが表示されます。また、コンストラクターを生成するオプションも提供します。
言語の一部であるより良い方法はありません。「プロパティ」キーワードのようなものはありません。
他の人が言及したように、IDE を使用してそれらを生成するという 1 つの代替手段があります。もう 1 つは、これを必要とするオブジェクトが多数ある場合は、基本クラスを受け取り、getter と setter を含むラッパーを生成する独自のコード生成ツールを作成することです。
変数をパブリック メンバーとして公開することもできます。ただし、検証ロジックを追加することを決定したときに、これはおそらく戻ってきてあなたを傷つけるでしょう。
ただし、最後の考えとして、クラスが単にデータを転送するために使用されない限り、おそらく内部状態を公開すべきではありません。IMO、ゲッターとセッターを持つ「動作」クラスはコードの匂いです。
ええ、あなたはちょっと運が悪いです。Groovyはそれらを生成しますが、標準のJavaにはサイコロはありません。Eclipseを使用すると、hashCode()関数とequals()関数を生成するだけでなく、非常に簡単に生成できます。
emacsを使用する場合、これを行うemacsマクロを定義できる可能性があります。そこにemacsの達人はいますか?:)
これは、反復的な冗長コードを getter/setter として生成する IDE の作業です。
IDE を使用して生成し、getter/setter の量を最小限に抑えるようにしてください。不変性の追加の利点が得られる可能性があります。
私はプロパティの C# 構文が好きです。きれいでクリーンで、非常にクリーンだと思います。
まあ、1 つのオプションは、パブリック フィールドをそれほど恐れないことです。get および set の内部で検証や余分な作業を行うことがないことがわかっている単純なクラスの場合、パブリック フィールドは必要なボイラープレートが少なく、構文的に優れており、より効率的です。