0

同じ型の引数を受け入れるメソッドがある場合、引数を間違った順序で渡す、つまりスワップするという問題が発生する可能性があります

int someMethod(int a, int b)
そして、呼び出し元はsomeMethod(b,a)代わりにメソッドを呼び出します。この問題を回避するための設計パターンがあると思います。
それは何ですか?

4

3 に答える 3

4

Javaがサポートしていない名前付きパラメータを参照しているようです。最良の代替手段は、オブジェクトを使用してパラメーターをラップすることです。

int someMethod(SomeBean bean);

...

SomeBean bean = new SomeBean();
bean.setA(1);
bean.setB(2);
someMethod(bean);
于 2013-03-11T12:33:46.113 に答える
1

enumメソッド引数の許容値が明確に指定されている場合に使用できます。

enum ValuesA {
    ONE(1), TWO(2), THREE(3), FOUR(4);
    private int val;
    ValuesA(int val) {this.val = val;}
    int val() {return val;}
}

enum ValuesB {
    TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6);
    private int val;
    ValuesB(int val) {this.val = val;}
    int val() {return val;}
}

これによりsomeMethod、同様に変更する必要があります:

int someMethod(ValuesA a, ValuesB b)

次のように呼び出されます。

someMethod(ValuesA.ONE, ValuesB.FOUR)

メソッド内では、 : , ..でint値を取得する必要があります。val()a.val()b.val()

もちろん、これは、 と の許容値のセットが既にわかっていて、セットが大きすぎない場合にのみ適用されaますb

もう 1 つの制限は、メソッドの呼び出し中に変数を使用できないことです。

于 2013-03-11T12:54:08.720 に答える
0

パラメーターが関連付けられているパラメーター リストがあり、この関係によって、一緒に渡すことができる有効な値のセットが決まる場合は、それらの有効性規則を理解するクラスを作成し、パラメーター リストの代わりにそれを渡すことをお勧めします。

たとえば、メソッドの署名が

int someMethod(int low, int high)

そして、次のような呼び出しを拒否したい

int z = someMethod(10, 6);

値の順序が間違っているため、Rangeおおよそ次のようにクラスを作成することをお勧めします。

public class Range {

    private int low;
    private int high;

    public Range(int low, int high) {
        super();
        if (high < low)
            throw new IllegalArgumentException("Invalid range");
        this.low = low;
        this.high = high;
    }

    public int getLow() {
        return low;
    }

    public int getHigh() {
        return high;
    }
}

メソッドのシグネチャを次のように変更します

int someMethod(Range range)

すでに構築された有効な範囲のみを渡すことができるようにします。

リレーションが別のものである場合は、もちろん別のクラスを作成して別のルールを取得します。

于 2013-03-12T11:48:56.587 に答える