W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
更改簽名重構組合了幾種可應用于方法簽名的不同修改。您可以使用此重構實現(xiàn)以下目的:
當更改方法簽名時,IntelliJ IDEA 會搜索該方法的所有使用實例,并更新所有調用、實現(xiàn)和重寫可安全修改以反映更改的方法的替換。
注意:
更改簽名之前的代碼:
// 函數(shù) paint() 在 IShape 接口中聲明
public interface IShape {
function paint(g: Graphics): void;
}
// 然后在 Canvas 類的 paint() 函數(shù)中調用這個函數(shù)
public class Canvas {
private var shapes: Vector.<IShape>;
public function paint(g: Graphics): void {
for each (var shape: IShape in shapes) {
shape.paint(g);
}
}
}
// 現(xiàn)在, 我們將顯示 IShape 接口的函數(shù) paint () 的更改簽名重構的示例
更改簽名之后的代碼:
// 在此重構示例中, 我們更改了現(xiàn)有參數(shù)的名稱, 并引入了兩個新參數(shù)。請注意, 第一個新參數(shù)是必需的參數(shù), 而第二項是可選的, 因為它的默認值是在函數(shù)定義中指定的。
public interface IShape {
function paint(graphics:Graphics, wireframe:Boolean, offset:Point = null):void;
}
// 執(zhí)行此重構時, 新參數(shù)被傳播到 Canvas 類的 paint() 函數(shù)中。因此, Canvas.paint()的簽名已更改。還要注意如何在 Canvas.paint() 中 IShape.paint() 是怎么調用的。
public class Canvas {
private var shapes: Vector.<IShape>;
public function paint(g:Graphics, wireframe:Boolean): void {
for each (var shape: IShape in shapes) {
shape.paint(g, wireframe);
}
}
}
// 此重構的其他結果是可能的。有關詳細信息, 請參閱下面的討論。
以下的代碼僅在安裝并啟用 Python Plugin 時有效:
# 此函數(shù)將被重命名:
def fibonacci( n ):
a, b = 0, 1
while b < n:
print( b )
a, b = b, a+b
n = int(input("n = "))
fibonacci( n )
# 使用新名稱的函數(shù):
def fibonacci_numbers( n ):
a, b = 0, 1
while b < n:
print( b )
a, b = b, a+b
n = int(input("n = "))
fibonacci_numbers( n )
以下的代碼僅在安裝并啟用 Python Plugin 時有效:
# 將添加新參數(shù):
def fibonacci( n ):
a, b = 0, 1
while b < n:
print( b )
a, b = b, a+b
n = int(input("n = ")
fibonacci( n )
# 函數(shù)的新參數(shù),不要忘記指定參數(shù)的默認值, 它將用于函數(shù)調用。
def fibonacci( n,a,b ):
a, b = 0, 1 # this should be done manually!
while b < n:
print( b )
a, b = b, a+b
n = int(input("n = ")
fibonacci( n,0,1 )
初始化器、默認值和新參數(shù)的傳播
對于添加到方法的每個新參數(shù),您可以指定:
您還可以將已引入的參數(shù)傳播給調用其簽名的函數(shù)的方法。
重構結果取決于是否指定默認值以及是否使用傳播。
傳播,可以將新參數(shù)傳播到調用其簽名所更改的方法的任何方法。在這種情況下,通常,調用方法的簽名會相應地更改。 但是,這些更改也取決于初始值設定項和新參數(shù)的默認值集的組合。
初始化程序,在 "初始值設定項" 字段中指定的值將作為默認參數(shù)值添加到函數(shù)定義中。這將使相應參數(shù)成為可選參數(shù)。(有關必需和可選參數(shù)的討論可以參考 Flex / ActionScript文檔)
如果未指定新參數(shù)的默認值(在默認值字段中),無論傳播是否使用,方法調用和調用方法的簽名都不會改變。
如果同時指定了初始化器和默認值,則重構結果取決于是否使用傳播:
默認值,通常,這是要添加到方法調用中的值。
如果新參數(shù)不傳播到調用方法,則此類方法中的調用也將使用此值。
如果使用傳播,則此值不會影響調用方法中的方法調用。
要了解上述不同的重構設置如何影響重構結果,請考慮以下示例。
所有示例都是前面顯示的重構的簡化版本。在所有情況下,會將 Boolean 類型的新參數(shù) wireframe 添加到 IShape 接口中 定義的函數(shù) paint() 。
在不同的示例中,使用初始化器和默認值的不同組合,并且將新參數(shù)傳播到 Canvas.paint()(它調用 IShape.paint())。
實例-1:
當未初始化,默認值為 false 并且使用傳播時,得到如下結果:
public interface IShape {
function paint(g:Graphics, wireframe:Boolean):void;
}
// Canvas 類中的 paint() 函數(shù):
public function paint(g:Graphics, wireframe:Boolean): void
{
for each
(
var shape: IShape in shapes) {
shape.paint(g,wireframe);
}
}
實例-2:
當未初始化,默認值為 false 并且沒有使用傳播時,得到如下結果:
public interface IShape {
function paint(g:Graphics, wireframe:Boolean):void;
}
// Canvas 類中的 paint() 函數(shù):
public function paint(g:Graphics): void
{
for each
(
var shape: IShape in shapes) {
shape.paint(g,false);
}
}
實例-3:
當初始化值為 true,默認值未設置并且使用傳播時,得到如下結果:
public interface IShape {
function paint(g:Graphics, wireframe:Boolean = true):void;
}
// Canvas 類中的 paint() 函數(shù):
public function paint(g:Graphics):
void
{
for each
(
var shape: IShape in shapes) {
shape.paint(g);
}
}
實例-4:
當初始化值為 true,無默認值并且沒有使用傳播時,得到如下結果:
public interface IShape {
function paint(g:Graphics, wireframe:Boolean = true):void;
}
// Canvas 類中的 paint() 函數(shù):
public function paint(g:Graphics):void
{
for each
(
var shape: IShape in shapes) {
shape.paint(g);
}
}
實例-5:
當初始化值為 true,默認值為 false 并且使用傳播時,得到如下結果:
public interface IShape {
function paint(g:Graphics, wireframe:Boolean = true):void;
}
// Canvas 類中的 paint() 函數(shù):
public function paint(g:Graphics, wireframe:Boolean = true):
void {
for each
(
var shape: IShape in shapes) {
shape.paint(g,wireframe);
}
}
實例-6:
當初始化值為 true,默認值為 false 并且不使用傳播時,得到如下結果:
public interface IShape {
function paint(g:Graphics,
wireframe:Boolean = true):void;
}
// Canvas 類中的 paint() 函數(shù):
public function paint(g:Graphics):
void {
for each
(
var shape: IShape in shapes) {
shape.paint(g,false);
}
}
$this-><parameter_name> = {#content}lt;parameter_name>;
class ChangeSignatureNewParam {
function __construct() {
$a = "Constructor in ChangeSignatureNewParam";
print $a;
}
}
如果從 __construct () 方法調用更改簽名重構并添加新的 $q 參數(shù), 則結果將取決于是選中還是清除 "創(chuàng)建和初始化類屬性" 復選框:class ChangeSignatureNewParam {
private $q;
function __construct($q) {
$a = "Constructor in ChangeSignatureNewParam";
print $a;
$this->q = $q;
}
}
class ChangeSignatureNewParam {
function __construct($q) {
$a = "Constructor in ChangeSignatureNewParam";
print $a;
}
}
代碼完成在 "參數(shù)" 區(qū)域的表的 "默認值" 字段中可用。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: