0

方法があります

public void create(String x, String y, String z, Calendar a, Calendar b, Calendar c, List<String> d){
    object.create(x, y, z, a, b, c, d);
}

これは、いくつかの管理クラスを介して渡されます。object.create呼び出しでパラメーターを明示的に入力する必要がなく、代わりにメソッド自体のパラメーターを単純に参照できるようにする方法はありますか?

私がこれを求めている理由は、私がこれらの方法をいくつか持っていて、それがかなり厄介に見えるからです。

パラメータはさまざまなタイプであり、としてではなく、そのように定義する必要があることに注意してくださいObject... args

4

2 に答える 2

5

ここでの通常の答えは、これらのプロパティを持つ新しいクラスを作成し、一連の個別の引数ではなく、そのクラスのインスタンス (メッセージ エンベロープのようなもの) を渡すことです。

例えば:

public void create(MyNiftyThing thing){
    object.create(thing);
}

...MyNiftyThingクラスは次のとおりです。

class MyNiftyThing {

    private String x;
    private String y;
    private String z;
    private Calendar a;
    private Calendar b;
    private Calendar c;
    private List<String> d;

    public MyNiftyThing(String x, String y, String z, Calendar a, Calendar b, Calendar c, List<String> d) {
        // ...init data members here...
    }

    // ...accessors for the data members here...
}

セッターではなくゲッターのみを使用することで、不変に保つことができます。純粋に便利なデータ構造である場合は、インスタンス メンバーにパブリックを使用することがありますが、適切な IDE であればアクセサーを自動生成できます (パブリックを使用した場合はfinal、不変性のために立ち往生することになります)。

もちろん、提供できる適切なデフォルトがある場合は、コンストラクターでそれらすべてを受け入れる必要はありません(または、複数のコンストラクターを使用できます)。

おそらくこの特定のケースには当てはまりませんが、たとえば、最小限の引数 (おそらくなし) を受け入れるコンストラクターと、関連するデータ メンバーを設定してチェーンに戻るMyNiftyThing一連のメソッドを持つことにより、独自のビルダーにすることができます。これにより、コンストラクターの署名で迷子になるのを防ぐことができます (「それは、、、または、、、...でしたか?」)。:-) その欠点は、本質的に不変性を失うことです。buildNNNthisxyzxzy

于 2013-03-11T18:22:56.103 に答える
1

リフレクションを使用して可能であり、コードがデバッグを有効にしてコンパイルされている場合。次の回答を参照してください: Java リフレクションを使用してメソッド パラメーター名を取得できますか?

于 2013-03-11T18:24:33.903 に答える