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