阅读(2134) (10)

IntelliJ IDEA提取参数对象重构

2017-11-03 11:25:51 更新

提取参数对象重构允许您为方法选择一组参数,并为这些参数创建包装类,或者使用现有的兼容包装类。对所选方法的所有调用都将对其参数进行适当的包装,并且包装参数的所有用法都将被新创建的参数类上的相应调用所替代。

如果传递给方法的参数数量变得太大,或者参数已经变得足够复杂,以至于它们自己的类的 first-class 处理,那么提取参数对象就很有用。另外,通常将原始参数作为参数对象进行包装,因此可以根据需要将接口和实现分离。

示例

重构前 重构后
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;
    }
    ...
}

提取参数对象

  1. 选择所需的方法。要做到这一点,请打开有问题的类进行编辑,然后在该方法上定位插入符号,在 Structure 视图中单击此类方法,或者在 UML 类图中选择它。
  2. 在主菜单或选择的上下文菜单上选择:重构| 提取| 参数对象。
  3. 在 "提取参数对象" 对话框中:
    • 在 "参数类" 部分中,指定是要创建新类,还是使用现有项来包装参数。
    • 在 "要提取的参数" 列表中,检查要包含在新类中的参数。
    • 单击 "预览" 以使 IntelliJ IDEA 搜索所选字段或方法的用法,并在 "查找" 工具窗口中显示重构预览结果。在预览中,您可以将使用实例包括在重构中或跳过它们。单击 "执行重构" 以将重构应用于所选的用法。
      如果您不想查看使用实例,请单击 "重构"。在这种情况下,将立即更改使用实例。

    如果要影响的文件是只读的,则可能会显示 "重构预览" 窗口。