阅读(2013) (11)

IntelliJ IDEA内联

2017-11-07 11:56:03 更新

IntelliJ IDEA 提供了以下的内联重构:

  • 内联变量重构用其初始值设定项替换冗余变量用法。此重构与提取变量重构相对应。变量必须在声明中初始化。如果在代码中的某个地方修改了初始值, 则只有在修改之前的实例才会被内联。
  • 内联方法重构导致将方法的主体放入其调用者的主体中。您可以选择:内联所有出现的方法,并删除该方法内联只发生一次,并保留该方法。此重构与提取方法相对应。
  • 内联到匿名类重构允许将冗余类替换为其内容。从 Java8 开始,内联的匿名类可以自动转换为 lambda 表达式。
  • 内联构造函数允许压缩一个构造函数链,如果其中一个是另一个的特例情况。
  • 内联 JSP/JSPX 像常规的 Java 内联重构一样工作。
  • 内联超类重构导致将超类的方法推送到它们所在的类中,并删除超类。

内联示例

    内联变量

    示例-1:

    内联变量前:

    public void method() {
        int number = anotherClass.intValue();
        int b = a + number;
    }

    内联变量后:

    public void method() {
        int b = a + anotherClass.intValue();
    }

    示例-2

    内联变量前:

    public void method() {
        AnotherClass.InnerClass aClass = anotherClass.innerClass;
        int a = aClass.i;
    }

    内联变量后:

    public void method() {
        int a = anotherClass.innerClass.i;
    }

    内联方法

    示例-1

    内联方法前:

    public void method() {
        int c=add(a,b);
        int d=add(a,c);
    }
    
    private int add(int a, int b) {
        return a+b;
    }

    内联方法后:

    public void method() {
        int c= a + b;
        int d= a + c;
    }

    示例-2

    内联方法前:

    public ArrayList method() {
        String[] strings = {"a","b","c"};
        ArrayList list=add(strings);
        return list;
    }
    
    private ArrayList add(String[] strings) {
        ArrayList list = new ArrayList();
        for (int i=0; i< strings.length; i++)
            {list.add(strings[i]);}
        return list;
    }

    内联方法后:

    public ArrayList method() {
        String[] strings = {"a","ab","abc"};
        ArrayList list1 = new ArrayList();
        for (int i=0; i< strings.length; i++)
            {list.add(strings[i]);}
        ArrayList list = list1;
        return list;
    }

    内联构造函数

    内联构造函数前:

    public class Class {
        public int varInt;
        public Class() {
            this(0);
        }
    
        public Class(int i) {
            varInt=i;
        }
    
        public void method() {
            Class aClass=new Class();
            ...
        }
    }

    内联构造函数后:

    public class Class {
        public int varInt;
        public Class(int i) {
            varInt=i;
        }
        public void method() {
            Class aClass=new Class(0);
            ...
        }
    }

    内联超类

    内联超类前:

    public class Bar {
        ...
        int calculations1() { ... }
        int calculations2() { ... }
    }
    
    class Foo extends Bar {
        int someMethod() {
            ...
            if (something > calculations1()) {
                ...
                return calculations2();
            }
            ...
        }
    }

    内联超类后:

    class Foo {
        ...
        int someMethod() {
            ...
            if (something > calculations1()) {
                ...
                return calculations2();
            }
            ...
        }
        int calculations1() {...}
        int calculations2() {...}
    }

    内联到匿名类

    内联到匿名类前:

    import java.util.*;
    public class Main {
        public class MyComparator implements Comparator<String> {
            @Override
            public int compare(String s1, String s2) {
                return 0;
            }
        }
    
        void sort(List<String> scores) {
            scores.sort(new MyComparator());
        }
    }

    内联到匿名类前:

    import java.util.*;
    
    public class Main {
    
        void sort(List<String> scores) {
            scores.sort((s1, s2) -> 0);
        }
    }

    执行内联重构

    1. 将插入符号放置在编辑器中的所需符号内联。
    2. 执行下列操作之一:
      • 在主菜单或上下文菜单上,选择:重构| 内联。
      • 按 Ctrl+Alt+N。
    3. 在与所选符号对应的内联对话框中指定内联选项。
    4. 预览并应用更改。