当前位置: 首页 > 知识库问答 >
问题:

IntelliJ重构以使用LoD

劳韬
2023-03-14

说我有一些阶级Foo

class Foo {
    protected String x = "x";

    public String getX() {
        return x;
    }
}

我有一个使用Foo并违反LoD的程序

class Bar {
    protected Foo foo;

    public Bar() {
        this.foo = new Foo();
    }

    public Foo getFoo() {
        return foo;
    }
}

public static void main(String [] args) {
    Bar bar = new Bar();
    String x = bar.getFoo().getX(); 
}

重构以使用LoD如下所示:

class Bar {
    protected Foo foo;

    public Bar() {
        this.foo = new Foo()
    }

    public String getFooX {
        return foo.getX();
    }
}

public static void main(String [] args) {
    Bar bar = new Bar();
    String x = bar.getFooX();
}

IntelliJ IDEA有很多重构方法(例如提取到方法、提取到变量、内联)。

IntelliJ IDEA中有没有一种方法可以重构像条形图这样的代码。getFoo()。getX()类似于条形图。getFooX()?

共有1个答案

长孙朝明
2023-03-14

假设您的示例是Java代码,您可以执行以下操作:

  1. bar.getFoo(). getX()上提取方法(创建getFOX()
  2. 如果需要,将创建的方法getFOX()移动到Bar
  3. getFOX()
  4. 上调用查找和替换代码重复项
  5. getFOX()
  6. 上调用转换为实例方法
  7. 可选的结构替换$a$. getFoo(). getX()如果您忘记了第3步,请将$a$. getFOX()替换为$a. getFOX();-)
  8. 内联getFoo()的所有调用(应该只在getFOX()中)
 类似资料:
  • 我正在使用IntelliJ 13,有一个Java项目设置,其模块基于maven项目。 有一个maven项目我必须重命名,所以我必须在pom文件中更改它的artifactId属性值。 如果我手动执行此操作,那么我将不得不找到它的所有出现并手动修改它们(例如:它作为模块包含在其中,并且它作为依赖项使用)。 由于IntelliJ提供了许多重构技术,我认为- 我可以尝试做一个查找/替换...但这仍然让我做

  • 这是我想做的。假设我有这个代码: 我想将Bar中的成员a和b提取到一个单独的Container类中,并以这段代码结束。请注意,Foo不再在bar上调用setA,而是请求容器并在其上调用setter: 在IntelliJ中有没有办法做到这一点? 我可以尝试使用重构- 这不是我想要的。

  • 主要内容:Intellij Idea 重命名,Intellij Idea 复制重构,Intellij Idea 移动重构,Intellij Idea 安全删除,Intellij Idea 查找和替换重复代码重构是改变现有程序结构而不改变其功能和用途的过程。重构还用于提高代码的可重用性、提高性能并删除重复的功能或未使用的功能。重构是一项应该非常小心地执行的任务,因为一个错误可能会产生很多错误。 在重构菜单中,我们可以找到所有可能的重构选项。还有一个可用于重构的快捷方式选项。“Ctrl+Alt+Sh

  • 遗留应用程序有3000个调用System.out. 使用Intellij的重构工具,我如何(轻松地)将对“System.out”的调用替换为对log4j/java的调用。util。日志记录/等等? 我浏览了一下重构菜单,但没有看到任何选项。 注意:我知道我可以使用源代码查找/替换,但很好奇重构工具是否处理了这种类型的usecase 谢谢

  • 更新到Intellij 2017.2后,构建我的项目会创建一个包含生成的源文件和资源文件的目录。这些文件复制了中已经包含的文件,并导致生成的类出现编译器错误。关于Gradle或IntelliJ中需要的修复有什么想法吗?

  • 谷歌的android架构组件教程中有一部分解释了如何抽象通过网络获取数据的逻辑。在其中,他们创建了一个名为NetworkBoundResource的抽象类,使用LiveData创建一个反应流,作为所有反应网络请求的基础。 根据我的理解,这门课的逻辑是: a)创建一个名为“result”的MediatorLiveData作为主要返回对象,并将其初始值设置为resource.loading(null)