0

元の Java コード:

public int test() {
    int total = 100;
    if (new Random().nextInt(2) < 1) {
        total += 1;
    } else {
        total -= 2;
    }
    return total;
}

リファクタリング後に予想されるコード:

public int test() {
    return 100 + randomChange();
}

private int randomChange() {
    return new Random().nextInt(2) < 1 ? 1 : -2;
}

コードを手動で変更することはできますが、IDE のリファクタリング ツール (IDEA や eclipse など) について回答したいです。残念ながら、私はそれを行う方法を見つけることができません。

手動でコードを壊すことなく、すべてのツールを使ってコードをリファクタリングすることは可能ですか?

4

2 に答える 2

3

これを強調表示します。

if (new Random().nextInt(2) < 1) {
    total += 1;
} else {
    total -= 2;
}

抽出方法:そして、抽出方法を使用します( Eclipse の場合はALT+ SHIFT+ 、Intellij iirc の場合は + + ですが、再確認してください) 。それでも、手動でリファクタリングを行う必要があります。デフォルトでは、「合計」を引数として渡し、変更された値を返す必要があるためです。MCTRLALTM

If/else -> 3 項: if/else ステートメントを 3 項演算子に変更する方法ありますが、これらは IDE では提供されませんが、Eclipse などのサード パーティのプラグインによって提供されます

Local var -> return ステートメント:「total」変数については、それを行うプラグインを認識しておらず、Eclipse/Intellij にはそのようなオプションがありません (少なくとも私は認識していません)。抽出ローカル変数を使用して、逆の方法で行うことができます。

@Downvoter: これは、現在のリファクタリング ツールで得られる最も近いものです。コメント セクションで述べたように、魔法の「私の心を読む」ボタンはありません。

于 2013-10-20T06:31:38.267 に答える
3

Eclipseでそれをリファクタリングする方法は次のとおりです。これでは、実際には必要な正確なコードが得られません。

  1. ブロックを選択しif-elseます。

  2. 右クリックして、「リファクタリング」に移動します

  3. オプションに移動 - 「抽出方法」

  4. メソッド名を付けます - 「randomChange」。totalas パラメータがメソッドに渡されていることがわかります。

  5. 「OK」をクリックします。

コードは次のようにラファクタリングされます。

public int test() {
    int total = 100;
    total = randomChange(total);
    return total;
}

private int randomChange(int total) {
    if (new Random().nextInt(2) < 1) {
        total += 1;
    } else {
        total -= 2;
    }
    return total;
}

if-elseただし、ブロックを条件付きにリファクタリングする方法はないと思います。

于 2013-10-20T06:34:13.200 に答える