如何在Java中更改方法簽名

2018-11-02 14:08 更新

在 Java 中,可以使用更改方法簽名重構(gòu)為:

  • 更改方法名稱、返回類型和可見性范圍。
  • 添加新的參數(shù)并刪除現(xiàn)有的參數(shù)。請注意,您還可以使用專用的提取參數(shù)重構(gòu)來添加參數(shù)。
  • 重新排列參數(shù)。
  • 更改參數(shù)名稱和類型。
  • 添加和刪??除異常。
  • 通過方法調(diào)用層次結(jié)構(gòu)傳播新的參數(shù)和異常。

示例

下表顯示了執(zhí)行相同更改方法簽名重構(gòu)的4種不同方法。

在所有情況下,類型為 double 的新參數(shù) price該類型的新參數(shù)添加到方法 myMethod () 中。

這些示例顯示了如何根據(jù)重構(gòu)設(shè)置影響方法調(diào)用、調(diào)用方法 (myMethodCall ()) 和其他代碼片段。

實(shí)例-1:

重構(gòu)之前重構(gòu)之后
public class MyClass {
// 這是其簽名將被更改的方法:
    public void myMethod(int value) {
        // some code here
    }
}
public class MyOtherClass {
    public void myMethodCall(MyClass myClass) {
        double d=0.5;
        // 此處是方法調(diào)用:        myClass.myMethod(1);
    }
}
// 要求 IntelliJ IDEA 更新所有的方法調(diào)用并且指定要傳遞給方法的默認(rèn)值。
public class MyClass {
    // 已經(jīng)添加的新參數(shù) price:
    public void myMethod(int i, double price) {
        // some code here
    }
}
public class MyOtherClass {
    public void myMethodCall(MyClass myClass) {
        double d=0.5;
        // 方法調(diào)用已相應(yīng)更改:        myClass.myMethod(1, 0.0);
    }
}
// 執(zhí)行重構(gòu)時, 0.0 被指定為默認(rèn)參數(shù)值。

實(shí)例-2:

重構(gòu)之前重構(gòu)之后
public class MyClass {
    // 這是其簽名將被更改的方法:    public void myMethod(int value) {
        // some code here
    }
}

public class MyOtherClass {
    public void myMethodCall(MyClass myClass) {
        double d=0.5;
        // 此處是方法調(diào)用:        myClass.myMethod(1);
    }
}
// 要求 IntelliJ IDEA 更新所有的方法調(diào)用,并且詢問 IntelliJ IDEA 在方法調(diào)用附近查找合適類型的變量, 并將此變量傳遞給方法。在 IntelliJ IDEA 中,該選項(xiàng)被稱為 Use Any Var.
public class MyClass {
    // 已經(jīng)添加的新參數(shù) price:
    public void myMethod(int i, double price) {
        // some code here
    }
}
public class MyOtherClass {
    public void myMethodCall(MyClass myClass) {
        double d=0.5;
        // 方法調(diào)用已相應(yīng)更改:        myClass.myMethod(1, d);
    }
}
// 在方法調(diào)用附近, IntelliJ IDEA 找到了與新參數(shù)具有相同類型的變量 d。因此, 此變量在方法調(diào)用中使用。

實(shí)例-3:

重構(gòu)之前重構(gòu)之后
// 這是其簽名將被更改的方法:    public void myMethod(int value) {
        // some code here
    }
}
public class MyOtherClass {
    public void myMethodCall(MyClass myClass) {
        double d=0.5;
        // 此處是方法調(diào)用:        myClass.myMethod(1);
    }
}
// 我們將要求 IntelliJ IDEA 保持方法調(diào)用不變, 但創(chuàng)建一個新的重載方法, 它將使用新的簽名調(diào)用該方法。在 IntelliJ IDEA 中, 這種處理方法調(diào)用的方法被稱為通過重載方法的委托。
public class MyClass {
    // A new overloading method has been created:
    public void myMethod(int i) {
               myMethod(i, 0.0);
               }
    // 新添加的參數(shù) price:
    public void myMethod(int i, double price) {
        // some code here
    }
}
public class MyOtherClass {
    public void myMethodCall(MyClass myClass) {
        double d=0.5;
        // 方法調(diào)用沒有改變:
        myClass.myMethod(1);
    }
}
// 請注意, 新的重載方法具有舊的簽名。但是, 它使用新的簽名調(diào)用該方法。在執(zhí)行重構(gòu)時, 0.0 被指定為默認(rèn)參數(shù)值。

實(shí)例-4:

重構(gòu)之前 重構(gòu)之后
public class MyClass {
    // 這是其簽名將被更改的方法:    public void myMethod(int value) {
        // some code here
    }
}
public class MyOtherClass {
    // 該方法也會更改其簽名:
    public void myMethodCall(MyClass myClass) {
        double d=0.5;
        // 此處是方法調(diào)用:        myClass.myMethod(1);
    }
}
// 這一次, 我們將要求 IntelliJ IDEA 通過調(diào)用方法 myMethodCall () 將新參數(shù)傳遞給方法調(diào)用。
public class MyClass {
    // 新添加的參數(shù) price:
    public void myMethod(int i, double price) {
        // some code here
    }
}
public class MyOtherClass {
    // 新的參數(shù)價格通過調(diào)用方法傳播到方法調(diào)用:    public void myMethodCall(MyClass myClass, double price) {
        double d=0.5;
        // 方法調(diào)用已相應(yīng)更改:        myClass.myMethod(1, price);
    }
}

更改方法簽名

  1. 在編輯器中,將光標(biāo)放在要更改其簽名的方法的名稱中。
  2. 執(zhí)行以下操作之一:
    • 按 Ctrl+F6。
    • 在主菜單中選擇:重構(gòu)| 更改簽名。
    • 從上下文菜單中選擇:重構(gòu)|更改簽名。

    請注意,如果重構(gòu)覆蓋其他方法的方法,IntelliJ IDEA 建議從基類修改方法,或僅修改選定的方法。

  3. 在 "更改簽名" 對話框中,對方法簽名進(jìn)行必要的更改,并指定需要進(jìn)行的其他相關(guān)更改。

    您可以:

    • 通過在可見性下選擇必要的選項(xiàng)來更改方法可見性范圍(訪問級別修飾符) 能見度。
    • 通過編輯 "返回類型" 字段的內(nèi)容來更改方法返回類型。

      請注意,此字段以及用于指定類型的其他字段中都有代碼完成。

    • 更改方法名稱。要做到這一點(diǎn),請?jiān)?"名稱" 字段中編輯文本。
    • 使用 "參數(shù)" 選項(xiàng)卡上的控件管理方法參數(shù):
      • 要添加新參數(shù),請單擊(Alt+Insert)并在相應(yīng)字段中指定新參數(shù)的屬性。如有必要,請選擇 Use Any Var 選項(xiàng)。

        添加參數(shù)時,可能需要將這些參數(shù)傳播到調(diào)用當(dāng)前方法的方法。

      • 要刪除參數(shù),請?jiān)诒碇羞x擇此參數(shù),然后單擊(Alt+Delete)。
      • 要重新排序參數(shù),請使用(Alt+Up)和(Alt+Down)。
      • 要更改參數(shù)的名稱、類型或默認(rèn)值,請單擊表中的此參數(shù),并在相應(yīng)的字段中進(jìn)行必要的編輯。
    • 沿調(diào)用當(dāng)前方法的方法的層次結(jié)構(gòu)傳播新的方法參數(shù)(如果有)。

      (可能有一些方法調(diào)用您正在更改其簽名的方法,這些方法反過來可能會被其他方法調(diào)用,等等,您可以通過以下方式將所做的更改傳播到當(dāng)前方法的參數(shù):調(diào)用方法的層次結(jié)構(gòu),并指定哪些調(diào)用方法應(yīng)該受到影響,哪些不應(yīng)該。)

      如何傳播新參數(shù):

      1. 點(diǎn)擊(Alt+G)。
      2. 在 "選擇要傳播新參數(shù)的方法" 對話框的左邊的窗格中,展開必要的節(jié)點(diǎn),并選中要將新參數(shù)傳播到的方法旁邊的復(fù)選框。

        為了幫助您選擇必要的方法,調(diào)用方法的代碼和被調(diào)用的方法顯示在對話框的右側(cè)部分(分別在調(diào)用方法和被調(diào)用者方法窗格中)。

        當(dāng)您在左側(cè)窗格中的方法之間切換時,右側(cè)部分中的代碼會相應(yīng)更改。

      3. 點(diǎn)擊“確定”。
    • 使用異常類型列表和 "例外" 選項(xiàng)卡上的按鈕管理方法異常。這些過程類似于用于管理方法參數(shù)的步驟。
    • 沿著調(diào)用當(dāng)前方法的方法的層次結(jié)構(gòu)傳播新的異常(如果有的話)。要啟動此過程,請使用(Alt+X)。在所有其他方面,該過程與用于傳播新方法參數(shù)的步驟類似。
    • 指定如何處理方法調(diào)用。為此,請選擇以下方法調(diào)用選項(xiàng)之一:
      • 如果你想要修改方法調(diào)用,請選擇 "修改"。
      • 如果要使現(xiàn)有方法調(diào)用保持不變,請通過重載方法選擇 "委托"。
  4. 要立即執(zhí)行重構(gòu),請單擊 "重構(gòu)"。

    若要在實(shí)際執(zhí)行重構(gòu)之前查看預(yù)期的更改并進(jìn)行必要的調(diào)整,請單擊 "預(yù)覽"。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號