IntelliJ IDEA 2025.1 Help

提取到类重构

IntelliJ IDEA 允许您使用将字段、方法和参数提取到新类中的重构工具。 这些重构在一个类变得过大且“做了太多事情”时非常有用。 在这种情况下,可能是将类拆分为更小、更内聚的类的好主意。

  1. 请选择您想要提取到类中的代码片段。

  2. 根据您要提取的内容,请访问以下网站之一:

    • 重构 | 提取 | 委托

    • 重构 | 提取 | 方法对象

    • 重构 | 提取 | 参数对象

  3. 在打开的对话框中,指定新类、方法和参数选项的名称。

  4. 预览您的更改,然后点击 OK

提取委托示例

提取委托重构允许您将类的一些字段和方法提取到单独的新创建的类中。

之前

之后

public class Foo { private String b; public String getInfo() { return ("(" + b + ")"); } ... } public class Bar { Foo foo; String t2 = foo.getInfo(); ... }
public class Foo { private final Info info = new Info(); public String getInfo() { return info.getInfo(); } ... } public class Info { private String b; public Info() {} public String getInfo() { return ("(" + b + ")"); } } public class Bar { Foo foo; String t2 = foo.getInfo(); ... }

提取方法对象示例

提取方法对象 重构将方法移入新类,将所有局部变量转换为其字段,使您能够将方法分解为同一对象上的其他方法。 它是 Extract Method(提取方法) 的一种替代方法,可以在提取的方法中有多个返回值时使用。

之前

之后

class Account { int gamma (int val1, ...) { //some computations return c-2*a; } }
class Account { int gamma (int val1, ...) { Calculations calculations = new Calculations(val1, ...).invoke(); int c = calculations.getC(); int a = calculations.getA(); return c-2*a; } private class Calculations { private int val1; ... private int a; private int c; public Calculations(int val1, ...) { this.val1 = val1; ... } public int getA() {return a;} public int getC() {return c;} public Calculations invoke() { ...//computations return this; } } }

提取参数对象示例

Extract Parameter Object 重构允许您选择方法的一组参数,并为这些参数创建一个包装类,或使用现有的兼容包装类。 所有对选定方法的调用将会适当地包装它们的参数,且所有对已包装参数的用途都将被新创建参数类中的相应调用所替换。

之前

之后

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; } ... }
最后修改日期: 2025年 4月 24日