2009-04-20 1 views
4

Groovyがインスタンス変数とクラス変数をすべてpublicにしてgetterとsetterをあなたのために書く方法が好きです。これにより、多くの不要なコーディングが節約されます。一方、私の上司はそれを嫌って、私は非常に悲しい作る:(Groovyを使用しないでJavaの過度の冗長性に対する解決策を探しています

アドオン/ Groovyのまたはいくつかの他のフレームワークを使用することなく、JavaでのGroovyの簡潔さを達成するために、そこに方法は何ですか?

私が探しているのは、Groovyなどを使わずにJavaの過度の冗長性に対する解決策です

すべてを公開するなど、Javaだけでも実行できますか?

答えて

3

不変のデータ構造を使用してください。ゲッターなし、セッターなし、面倒なく。

Functional Javaを試してみてください。これは単なる通常のJavaライブラリですが、強力な抽象化と便利な(不変の)データ構造により、より少ないコードで多くのことを言えるようになります。たとえば、これを翻訳:

List<String> s = new ArrayList<String>(); 
    for (String x : xs) { 
    for (String y : ys) { 
     for (String z : zs) { 
     s.add(doSomething(x, y, z)); 
     } 
    } 
    } 

を...これに:http://code.google.com/p/javadude/wiki/Annotations

注釈プロセッサは、典型的なのたくさんのあなたのためのスーパークラスを生成します。

List<String> s = xs.bind(ys, zs, doSomething); 
+0

興味深い。これはRubyのブロックに似た機能を追加しますか? –

+0

一般的なクロージャ(Rubyでは「ブロック」)として機能するいくつかのタイプが用意されています。タイプAからタイプBへの関数であるF があります。タイプAの引数を取るアクションをモデル化した効果があります。P1 があり、タイプAの値が得られます。 – Apocalisp

+0

また、 BGGAプリコンパイラを使いたい場合は、これらの構造の使用をあまり冗長にしません。これは必須ではありませんが、それはよりよく見えます。 – Apocalisp

8

Java言語はそのままです。新しい言語(groovyのようなもの)に移行することなく、コア言語を変更することはほとんどありません。経営陣からバイインを受け入れることは、あなたがグルービーに移籍するのと同じくらい難しくないかもしれません。私は数年前と同じような立場にいました。 Groovyをソフトウェアのいくつかの領域に導入することができます。

まず、単体テスト用に使用することをおすすめします。基本的にGroovyでクラスを書くと、Javaバイトコードまでコンパイルされます。あなたのクラスパスに魅力的な瓶がある限り、他の人はそれがグルーヴィーなコードであることさえ知らないかもしれません。テスト用に使用することで、コードを簡素化して作業を簡単にする方法を示すことができます。それを経営陣に売ることができるはずです。

そこから、動的言語があなたにいくつかの仕事を節約する他の新しい領域で紹介してください。 GroovyとJavaは、同じセットのコアライブラリを使用しているため、非常にうまく混ざっています。

0

私は、特定のタスク(JPA、Swingなど)のためのより効果的なフレームワークから離れて、ソースコードを小さくすることについて何も知らない。

通常、機能がIDEから提供されている場合は、その種類です。

私はゲッター/セッターを作成するツール、抽象メソッドを自動実装するツール、その他さまざまなショートカットを持つNetbeansを使用します。もちろん、ソースコードはまだまだ冗長です。

6

このような状況では、ゲッターとセッターを書くことができるIDEを友人にすることができます。

ゲッターとセッターを書かなければならないのは、新しいクラスを書く上で最も反復的で不愉快な部分です。 EclipseのようなIDEを使用すると、automatically generate the getters and settersというコードを書くことができ、冗長コードを書く際の苦労を軽減することができます。

もちろん、getXsetXのメソッドを使用する必要性は軽減されませんが、少なくともクラスの実装は少し簡単で負担は少なくなります。

+0

Cool。私はEclipseを使用していますが、この機能があることはわかりませんでした。 –

+0

リファクタリングツールに加えて、私はEclipseのgetter/setter生成機能が非常に便利な機能であることを発見しました。 – coobird

+0

IntelliJ IDEAはゲッターとセッターも生成します。 –

1

AOPを使用して、冗長性の一部を取り除くことができます。

たとえば、プロパティがある場合: 文字列名。

これで、次のように定義できます。 @GetterSetter public String Name(String name){};

次に、注釈を探して周囲を囲むようなアスペクトがあるため、パラメータがnullの場合や書き込み(パラメータがnullでない場合)の読み込みが行われます。適切な行動。

これはかなり簡単に書くことができますが、AOPのバイインを取得する必要があります。これは難しいかもしれません。

しかし、EclipseやNetbeansはゲッター/セッターを簡単に作成するので、特別なことをする必要がなければ簡単に行うことができます。

私は自分のクラスをgetters/setterだけの自分のクラスに入れる傾向があります。次に、冗長性を調べる必要はありません。必要に応じてequalsメソッドとhashメソッドを参照してください。それを使用して、退屈な余分なコーディングを隠すだけです。

0

は私の豆の注釈を試してみてくださいあなたが書いてくれる定型文:

@Bean(
    properties={ 
     @Property(name="name", bound=true), 
     @Property(name="age", type=int.class, bound=true) 
    } 
) 
public class Person extends PersonGen { 
} 
0

ドメイン固有のフレームワークを使用することで、Javaの効果的な抽象度を大幅に高めることができます。たとえば、RESTfulなWebサービスを書くときには、Restletが大部分の退屈な情報を処理します。また、POJOをXMLやJSONとの間でマッピングする必要がある場合は、XStreamやJAXBなどのパッケージが自動的にマッピングロジックを生成します。退屈なJDBCプログラミングを避けるために、iBatisやHibernateのような永続性マネージャを試してみてください。 FreemarkerやVelocityのようなテンプレートシステムは、マークアップを生成するのがずっと簡単です。

ツールサポートがない場合でも、低レベルの詳細を共通のメソッドとクラスに分解して、トップレベルのコードがより抽象的に感じられるようにすることができます。

(あなたはユニットテストのいくつかを書くために、たとえば、あなたのプロジェクトに脇役でのGroovyを評価することができればあなたは、あなたの上司に尋ねる考えるかもしれません。)

0

あなたは、任意の持つ任意のプロパティまたはメソッドにラベルを付けることができますGroovyの標準のアクセス修飾子や型宣言が含まれています。

GroovyはJavaのスーパーセットであることを覚えておいてください。

関連する問題