codecamp

IntelliJ IDEA重构:删除中间人

此重构也可从 UML 类图中获得。

通过 "删除中间人" 重构,您可以替换在类中委托方法的所有调用,并直接对委托到的字段进行等效调用。此外,您还可以自动删除类委托方法,现在将不使用。

如果您有一个简单地将其许多方法调用转发给其他类的对象的类,并且希望简化您的设计,则此重构非常有用。

删除中间人示例

操作前:

public class Foo {
    Bar bar;
    public Foo getImpValue() {
        return bar.getImpValue();
    }
}

public class Bar {
    private Foo impValue1;
    public Bar(Foo impValue) {
        impValue1 = impValue;
    }
    public Foo getImpValue() {
        return impValue1;
    }
}

public class Client {
   Foo a;
   Foo impValue = a.getImpValue();
}

操作后:

public class Foo {
    Bar bar;
    public Bar getbar() {
        return bar;
    }
}

public class Bar {
    private Foo impValue1;
    public Bar(Foo impValue) {
        impValue1 = impValue;
    }
    public Foo getImpValue(){
        return impValue1;
    }
}

public class Client {
   Foo a;
   Foo impValue = a.getbar().getImpValue();
}

删除中间人

  1. 在编辑器中打开有问题的类,并将插入符号放在委托字段的名称中。或者,在所需类的“结构”视图中选择委托字段。
  2. 在主菜单或选择的上下文菜单上选择:重构| 删除中间人(Refactor | Remove Middleman)。
  3. 在删除中间人对话框中:
    • 选择是否希望任何只转发到此字段的调用的方法都被委派。这些方法将不被当前项目中的代码使用,但是项目之外的代码仍然可能需要这些方法。您可能希望保留这些委托方法以实现向后兼容。
    • 单击 "预览" 以使 IntelliJ IDEA 搜索所选字段的用法,并在 "查找" 工具窗口中显示重构预览结果。在预览中,您可以将其用于重构或跳过它们。单击 "执行重构" 以将重构应用于所选的用法。
      如果您不想查看使用情况,请单击 "重构"。在这种情况下,将立即更改使用实例。

    如果受影响的文件是只读的,则可能会显示 "重构预览" 窗口。

IntelliJ IDEA向下推送成员
IntelliJ IDEA重命名重构
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

IntelliJ IDEA的一般准则

什么是IntelliJ IDEA项目

使用IntelliJ IDEA的意图行为

IntelliJ IDEA使用运行/调试配置

特定于VCS的程序

IntelliJ IDEA语言和特定框架指南

IntelliJ IDEA的数据库和SQL功能

IntelliJ IDEA使用之JavaServer Faces(JSF)

IntelliJ IDEA:分析PHP应用程序的性能

IntelliJ IDEA:调试PHP应用程序

IntelliJ IDEA:适用于PHP的Google App Engine

IntelliJ IDEA更多内容

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }