當您執行提取函數參數重構時,IntelliJ IDEA 將:
⒈ 分析選定的代碼片段,以找出方法簽名是什么,如果您將這個片段提取到一個新的單獨的方法中。
⒉ 使用此方法簽名查找所有功能接口,并建議您選擇其中一個。(只建議使用 @functionalinterface 或屬于知名庫的接口,如:Guava、Apache collection 等。)
⒊ 將代碼片段與基于所選接口的匿名類封裝起來,并使用此匿名類作為參數。
⒋ 在適當情況下,進行相關代碼調整。
提取函數參數前:
@FunctionalInterface
public interface Person {
public void sayHello (String s);
}
public class Hello {
private void printHello () {
String s="Hello";
System.out.println(s);
}
private void printText () {
printHello();
}
}
提取函數參數后:
@FunctionalInterface
public interface Person {
public void sayHello (String s);
}
public class Hello {
private void printHello(Person person) {
String s = "Hello";
person.sayHello(s);
}
private void printText () {
printHello(new Person() {
public void sayHello(String s) {
System.out.println(s);
}
});
}
}
在上述例子中,重構是在 System.out.println(s); 內部執行的 Hello.printHello()。
IntelliJ IDEA 使用適當的方法簽名((String) -> void)找到所有的功能接口,并建議您選擇其中的一個接口。(在這個例子中,接口 Person 被選中。)
結果是:
⒈ 選定的片段(System.out.println(s);)使用基于接口的匿名類包裝 Person。這個匿名類作為參數傳遞給 printHello() 內部的調用 printText()。
⒉ 將 Person 添加為 printHello() 的參數,并將最初選定的代碼片段替換為接口方法的調用(sayHello())。
⒈ 選擇感興趣的代碼片段并執行以下操作之一:按 Ctrl+Shift+Alt+P。從主菜單或上下文菜單中選擇:重構| 提取| 功能參數(Refactor | Extract | Functional Parameter)。從主菜單選擇:重構| 重構這個(Refactor | Refactor This)(Ctrl+Shift+Alt+T)并且選擇功能參數(Functional Parameter)。
⒉ 從列表中選擇所需的功能接口。
⒊ 在提取參數對話框中指定重構選項。