java - IntelliJ 重构为内联冗余数据类

标签 java intellij-idea refactoring automated-refactoring

是否有一系列 IntelliJ 自动重构可以消除多余的类 Foo?

重构前:

  public static class Foo {
    private final String s;
    public Foo(String s) {
      this.s = s;
    }

    public String getS() {
      return s;
    }
  }

  private static void run() {
    Foo f = new Foo("blah");
    f.getS().length();
    f.getS().getBytes();

    Foo f2 = new Foo("blahg");
    f2.getS().length();
    f2.getS().getBytes();
  }

重构后:


  private static void run() {
    String f = "blah";
    f.length();
    f.getBytes();

    String f2 = new "blahg";
    f2.length();
    f2.getBytes();
  }

在我的具体案例中进行自动重构的原因是现实生活中 Foo 被使用了几千次。但我也只是感兴趣。使用其他自动化步骤将代理对象获取到 Foo 的状态非常容易,但我就是不知道如何进行最后一点。

最佳答案

不确定这在更通用的设置中如何工作,但我会:

  • 重构 FoogetS 的名称更改为非常独特的名称,例如XXXXXXXXX

  • 字符串将 .XXXXXXXXX() 替换为空字符串

  • 正则表达式 stringn 将 Foo (\w+) = new Foo\("(\w+)"\); 替换为 String $1 = "$2";

这将处理 run 方法中的所有内容。现在您只需要手动删除 Foo,虽然这不是 IntelliJ 重构,但只需要在一个地方完成,因此可能是可以接受的。

关于java - IntelliJ 重构为内联冗余数据类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58230042/

相关文章:

java - Android Sqlite3 - 由命令行创建的列,但不是从我的 Android 代码创建的

java - Android - 在 TableLayout 中显示 SQLite 数据库记录

intellij-idea - 正确更新 IntelliJ IDEA 社区版

java - 尝试使用 Spring 编译时包不存在

java - 创建名称为 'requestMappingHandlerAdapter' 的 bean 时出错

java - 使用 testNG 读取 selenium 中的 excel 数据

gradle - 智能思想中的Kotlin包结构

c# - 在 C# 中,是否有通用方法将 DBSet 传递给方法?

visual-studio-2008 - Visual Studio : Remove and sort using except the System reference

java - org.mockito.Mockito.times(1) 有方便的方法吗?