IntelliJ IDEA提取參數(shù)對(duì)象重構(gòu)

2018-11-03 11:38 更新

提取參數(shù)對(duì)象重構(gòu)允許您為方法選擇一組參數(shù),并為這些參數(shù)創(chuàng)建包裝類,或者使用現(xiàn)有的兼容包裝類。對(duì)所選方法的所有調(diào)用都將對(duì)其參數(shù)進(jìn)行適當(dāng)?shù)陌b,并且包裝參數(shù)的所有用法都將被新創(chuàng)建的參數(shù)類上的相應(yīng)調(diào)用所替代。

如果傳遞給方法的參數(shù)數(shù)量變得太大,或者參數(shù)已經(jīng)變得足夠復(fù)雜,以至于它們自己的類的 first-class 處理,那么提取參數(shù)對(duì)象就很有用。另外,通常將原始參數(shù)作為參數(shù)對(duì)象進(jìn)行包裝,因此可以根據(jù)需要將接口和實(shí)現(xiàn)分離。

示例

重構(gòu)前 重構(gòu)后
public class A {
    private void drawEdge(Graphics g, float edgeWidth,
        int x1, int x2, int y1, int y2) {
        final Graphics2D g2d = (Graphics2D) g;
        g2d.setStroke(new BasicStroke(edgeWidth));
        g.drawLine(x1, y1, x2, y2);
    }
}
public class A {
    private void drawEdge(Edge edge, Graphics g) {
        final Graphics2D g2d = (Graphics2D) g;
        g2d.setStroke(new BasicStroke(edge.getEdgeWidth()));
        g.drawLine(edge.getX1(), edge.getY1(), edge.getX2(), edge.getY2());
    }
}
public class Edge {
    private final float edgeWidth;
    private final int x1;
    ...
    public Edge(float edgeWidth, int x1, int x2, int y1, int y2) {
        this.edgeWidth = edgeWidth;
        this.x1 = x1;
        ...
    }
    public float getEdgeWidth() {
        return edgeWidth;
    }
    public int getX1() {
        return x1;
    }
    ...
}

提取參數(shù)對(duì)象

  1. 選擇所需的方法。要做到這一點(diǎn),請(qǐng)打開(kāi)有問(wèn)題的類進(jìn)行編輯,然后在該方法上定位插入符號(hào),在 Structure 視圖中單擊此類方法,或者在 UML 類圖中選擇它。
  2. 在主菜單或選擇的上下文菜單上選擇:重構(gòu)| 提取| 參數(shù)對(duì)象。
  3. 在 "提取參數(shù)對(duì)象" 對(duì)話框中:
    • 在 "參數(shù)類" 部分中,指定是要?jiǎng)?chuàng)建新類,還是使用現(xiàn)有項(xiàng)來(lái)包裝參數(shù)。
    • 在 "要提取的參數(shù)" 列表中,檢查要包含在新類中的參數(shù)。
    • 單擊 "預(yù)覽" 以使 IntelliJ IDEA 搜索所選字段或方法的用法,并在 "查找" 工具窗口中顯示重構(gòu)預(yù)覽結(jié)果。在預(yù)覽中,您可以將使用實(shí)例包括在重構(gòu)中或跳過(guò)它們。單擊 "執(zhí)行重構(gòu)" 以將重構(gòu)應(yīng)用于所選的用法。
      如果您不想查看使用實(shí)例,請(qǐng)單擊 "重構(gòu)"。在這種情況下,將立即更改使用實(shí)例。

    如果要影響的文件是只讀的,則可能會(huì)顯示 "重構(gòu)預(yù)覽" 窗口。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)