2016-07-04 73 views
1

爲了一般化,我們舉一個這樣的例子。有沒有辦法改變方法參數列表intellij?

我有一個這樣的方法。

public void mymethod(int param1, String param2){ 
    //do something 
} 

我想將它改成這樣的東西。

public void mymethod(int param1, String param2, String param3){ 
    //do something 
} 

有沒有一個首選的方法來做到這一點與intellij沒有打破用法?

回答

7

你可以用intellij做以下事情。

隨着Refactor - >Change Signature菜單中,您可以:

  • 更改方法的名稱,返回類型和可見性範圍。
  • 添加新參數並刪除現有參數。請注意,您也可以使用專用的Extract Parameter重構來添加參數。
  • 重新排序參數。
  • 更改參數名稱和類型。
  • 添加和刪除異常。
  • 通過方法調用層次傳播新的參數和異常。

要轉到Refactor - >Change Signature菜單

在編輯器中,將光標移到要更改其簽名的方法的名稱中。 執行下列操作之一:

  • 按下Ctrl鍵+ F6
  • 選擇重構|在主菜單中更改簽名。
  • 選擇重構|從上下文菜單中更改簽名(右鍵單擊)。

如需更多信息,請看看here

1

從乾淨的代碼角度來看,答案很簡單:不要這樣做 - 您的方法的參數越少越好!

添加第三個參數看起來像是給我一個非常錯誤的路線。

也許你最喜歡的想法可以改變你的所有客戶端代碼使用null或一些空字符串用於新的參數......但是又一次:那個「味道」也不好。

您會發現:您的代碼一方面應該是冗長的,但儘可能「簡潔」。含義:因爲您的代碼需要它們,所以方法中的每個參數都存在。所以,如果你要添加第三個參數,那可能大部分時間都是空的;只有在你希望它「意味着」它非空的地方,那麼,我的兩分:不要那樣做:顯而易見,兩個arg + null方法將會比三個方法做別的事情-arg方法。如果是這樣 - 保留兩種單獨的方法。

請記住:您添加到方法中的每個參數爲您的測試範圍添加了更多的變體。你真的不想那樣。你的方法應該儘可能簡單,以便儘可能簡單地進行測試。

+1

我問這個問題,只是爲了知道是否有任何IDE的快捷方式。不在oop視角。你可以看到我採取了一個虛擬的例子。 :) –

+1

@AdInfinitum沒有問題的:),有些事情要從他的答案中提取。而且我也沒有投票。 –

+0

@Jagermeister同時,如果您使用的是像Guice這樣的現代DI框架,您可能已經注意到可能會發生這種情況。並同意你在oop視角下這是一個不好的主意。 –

1

您可以右鍵單擊方法的名稱,然後refactor - >change signature(或命令 + F6,如果你是在Mac上,按Ctrl + F6 的Windows,Linux)。

應打開一個新窗口,您可以在其中添加和刪除新參數,以及更改方法的可見性。

1

只是爲了在這裏添加一些失分。

  • 添加參數,更改參數類型,更改方法的返回類型對於IDE來說不會自動化很多。

原因是IDE無法猜測並創建或替換已更改參數或方法用法的分配。

  • 添加/更改異常也幾乎是半自動的,因爲IDE不知道try/catch還是傳遞異常與方法的用法。您必須手動完成每項任務,並在每個地方做您想做的事。
相關問題