首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将IntelliJ重构为内联冗余数据类

将IntelliJ重构为内联冗余数据类
EN

Stack Overflow用户
提问于 2019-10-03 20:44:36
回答 2查看 70关注 0票数 2

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

在重构之前:

代码语言:javascript
运行
AI代码解释
复制
  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();
  }

重构后:

代码语言:javascript
运行
AI代码解释
复制
  private static void run() {
    String f = "blah";
    f.length();
    f.getBytes();

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-04 09:01:21

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

XXXXXXXXX

  • String

  • 重构Foo,将getS的名称更改为非常不同的名称,例如,用空字符串替换.XXXXXXXXX(),用空字符串

  • Regex字符串替换Foo (\w+) = new Foo\("(\w+)"\);,用String $1 = "$2";

替换Foo (\w+) = new Foo\("(\w+)"\);

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

票数 2
EN

Stack Overflow用户

发布于 2019-10-16 15:26:02

一种更安全的方法是使用结构替换。

在搜索框中的菜单中搜索结构替换( $Instance$.getS().$MethodCall$($Parameter$)

  • After

  • type $Instance$.getS().$MethodCall$($Parameter$) ),在$Instance$上添加一个筛选器,使其仅为Foo

  • 替换的实例:--您可以继续使用结构替换并找到所有实例,并替换它们,但是只需运行Migrate并从类Foo创建自定义类型映射到‘String`’H 214,如果您想再次使用结构替换,您可以使用这样的方法来查找和替换
    • Foo $name$ = new Foo($Parameter$);
    • String $name$ = $Parameter$;

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58230042

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文