0

多くの変数を受け入れていたため、「パラメーターの導入」を使用してメソッドをリファクタリングしました。しかし、今ではすべての呼び出し元がインラインコンストラクターを持っています

this.somemethod(new MyParam("a", "b","c","d"); 

コンストラクターを次のようなセッターに置き換えてリファクタリングしたいと思います

MyParam myParam= new MyParam();
myParam.setA("a");........
.
.
this.somemethod(myParam);

これを行う方法はありますか??

Eclipse で報告された同様のバグがありましたhttps://bugs.eclipse.org/bugs/show_bug.cgi?id=105324

4

3 に答える 3

3

これを行う方法はありますか??

はい、返すセッターのような関数を持っているthisので、それらを連鎖させることができます:

public class MyParam {
    private String foo;
    private int bar;
    // ...and so on...

    public MyParam() {
        // Set reasonable defaults here
    }

    public MyParam letFoo(String foo) {
        this.foo = foo;
        return this;
    }

    public MyParam letBar(int bar) {
        this.bar = bar;
        return this;
    }

    // ...and so on...
}

使用法:

someFunction(new MyParam()
             .letFoo("foo")
             .letBar(42)
             .letXyz(...)
             // ...and so on...
);

これは、A) いくつかの「パラメーター」に適切なデフォルトがあり、呼び出し元が必ずしもすべてのセッターを使用する必要がない場合、および B) 多くのパラメーターがあるため、順序がわかりにくい場合に特に役立ちます。もの。

Sean がコメントで指摘しているように、JavaBean の命名規則を使用していますが、JavaBean のセッターには戻り値があってはなりませんletXyz。(詳細については、SO に関するこの他の質問とその回答を参照してください。)setXyzsetXyz

于 2012-04-25T08:33:14.800 に答える
0

私があなたを正しく理解しているなら、あなたは現在のコンストラクターからパラメーターなしのコンストラクターに自動的に移動し、その後セッターを呼び出すことを望みます。これを行うには、setter呼び出しを現在のコンストラクターに配置し、それらがすべてpublicであることを確認してから、コンストラクターでインラインメソッドリファクタリングを実行します。ああ、でもEclipseはそれをさせてくれません。だからあなたは書くことができます:

public static A newA(int a, int b) {
    A aa = new A();
    aa.setA(a);
    aa.setB(b);
    return aa;
}

(もちろん、空のコンストラクターも作成する必要があります)次に、すべてを手動で置き換えます

a = new A(3,2);

a = A.newA(3,2);

次に、メソッドをインライン化できますnewA()。わざわざする価値はほとんどないと思います。しかし、もっと自動化された方法はわかりません。

于 2012-04-25T14:09:04.077 に答える
0

なぜこんな醜いことをしているの?

次のようなことをしてみませんか

public void sometMethod(Object.. parameters)

そして、次のようにアクセスできます

this.someMethod("a", "b", "c", "d", "e", "f"); //:)
//or
this.someMethod("a");

そして、あなたの解決策に答えるために...できる..リフレクションを使用して...

リフレクションを使用してメソッドに動的にアクセスできます...ここにリンク

于 2012-04-25T08:31:28.487 に答える