codecamp

IntelliJ IDEA提取接口重构

使用提取接口重构,您有下列三个选择:

  • 根据类的方法创建一个接口而不需要立即应用新的接口。
  • 创建一个接口并将其应用于源代码。
  • 重命名原始类,并实现新创建的接口。在这种情况下,IntelliJ IDEA 会更改原始类的所有用法,以尽可能使用该接口。

另外,在初始类中声明的静态 final 字段可以被移动到一个接口。因此,将会创建一个包含特定方法和字段的接口。从而,指定的类方法成为相应接口方法的实现。

示例

在这里,我们有一个类,并执行提取接口重构,根据类的方法创建一个接口。

重构前 重构后
// AClass.java 文件
class AClass {
    public static final double CONSTANT=3.14;
    public void publicMethod() {//some code here}
    public void secretMethod() {//some code here}
}
// AClass.java 文件
class AClass implements AnInterface {
    public void publicMethod() {//some code here}
    public void secretMethod() {//some code here}
}
// AnInterface.java 文件
public interface AnInterface {
    double CONSTANT=3.14;
    void publicMethod();
}

提取接口重构的另一个例子,当重命名的原始类和使用接口的可能选项被选中。

重构前 重构后
public class FormerAClass implements AClass {
    public void publicMethod() {//some code here}
    public void secretMethod() {//some code here}
}
public interface AClass {
    double CONSTANT=3.14;
    void publicMethod();
}

您可以从已实现另一个接口的类中提取接口。让我们从实现 AnInterface 的类中提取接口。根据我们是否需要 AnotherInterface (提取的接口) 来扩展 AnInterface (现有的界面), 或者我们希望源 AClass 实现它们, 我们将得到以下代码:
提取的接口扩展了现有的一个:


您可以从已经实现了另一个接口的类中提取接口。让我们从实现 AnInterface 的类中提取接口。根据我们是否需要 AnotherInterface (提取的接口)来扩展 AnInterface (现有的接口)还是我们希望源代码 AClass 来实现它们,我们将得到以下代码:

提取的接口扩展了现有的接口:

class AClass implements AnotherInterface {
    public void publicMethod() {
        //some code here
    }
    public void secretMethod() {
        //some code here
    }
}

提取的接口:

public interface AnotherInterface extends AnInterface {
    }

Source 类实现两个接口。

Source 类:

class AClass implements AnInterface, AnotherInterface {
    public void publicMethod() {
        //some code here
    }
    public void secretMethod() {
        //some code here
    }
}

提取的接口:

public interface AnotherInterface {
}

提取接口

  1. 在 "项目" 视图、"结构" 视图中选择类,或在编辑器中的类中的任意位置放置插入符号。
  2. 在主菜单或选择的上下文菜单上,选择:重构| 提取| 接口。此时将显示 "提取接口" 对话框。
  3. 要提取新的接口,请选择 "提取接口" 选项并指定新接口的名称。 
    要重命名原始类并使其成为新创建的接口的实现,请选择 "重命名原始类" 并使用 "可能的接口" 选项,并指定原始类的新名称。IntelliJ IDEA 会将所有原始类的用法改为只在仍然需要的地方执行的用法。
  4. 指定新的接口所在的包。
  5. 在 "成员" 中选择要在接口中列出的类成员以形成接口区域。该列表显示了该类的所有方法,以及最终的静态字段(常量)。
  6. 在 JavaDoc 区域,选择要应用于 JavaDoc 的操作。
    • 若要将其保留在其所在的位置,请选择 "As" 选项。
    • 要将其复制到提取的接口,请选择 "复制" 选项。
    • 要将其移动到提取的接口,请选择 "移动" 选项。
  7. 单击 "重构" 以继续。
  8. 在准备就绪时单击 "重构"。如果 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; }