簡體   English   中英

Eclipse中的方法重構

[英]Method refactoring in Eclipse

我嘗試在Eclipse IDE(JDT)中執行以下重構步驟,但找不到所需的重構,並且無法記住所有步驟的名稱。 我在SourceMacking上檢查了重構,但找不到正確的重構。

讓我們以以下情形為例:

class A {

    method(B b) {
      doSomethingWithA();
      b.doSomethingWithB();
    }

    [...]
}

class B {
    [...]
}


1)使方法靜態 (缺少重構名稱?):

class A {

    static method(A a, B b) {
      a.doSomethingWithA();
      b.doSomethingWithB();
    }

    [...]
}

class B {
    [...]
}


2) 移動方式:

class A {
    [...]
}

class B {

    static method(A a, B b) {
      a.doSomethingWithA();
      b.doSomethingWithB();
    }

    [...]
}


3)轉換為實例方法

class A {
    [...]
}

class B {

    method(A a) {
      a.doSomethingWithA();
      doSomethingWithB();
    }

    [...]
}


因此,歡迎任何知道在Eclipse中逐步執行此操作的人或知道重構名稱的人。 目標是為每個步驟都提供IDE支持。

不幸的是,Eclipse的重構功能不如其他IDE(例如Jetbrains的IntelliJ )完整。 我將提供有關如何執行IntelliJ和Eclipse請求的每個重構的說明。

使用IntelliJ

  1. 使方法靜態
  2. 移動實例方法
  3. 轉換為實例方法

使用Eclipse

  1. 將方法設為靜態:Eclipse不直接支持它,但是我們可以使用另外兩個重構來實現。

    1.1。 介紹間接

    Eclipse的引入間接重構

    結果

     public static void method(A a, B b) { a.method(b); } public void method(B b){ doSomethingWithA(); b.doSomethingWithB(); } 

    1.2。 排隊

    Eclipse的內聯重構

    結果

     public static void method(A a, B b) { a.doSomethingWithA(); b.doSomethingWithB(); } 
  2. 移動靜態成員

  3. 轉換為實例方法:現在,這變得棘手了。 如果您想從第1步轉到第3步,則可以使用Eclipse的Move方法 ,它將完美地處理所有事情。 但是,我沒有使用Eclipse的自動重構從第2步到第3步的方法。

在了解到重構被稱為“轉換為實例方法”之后,我搜索了Eclipse JDT的錯誤數據庫,發現了一個壞消息:

錯誤10605 錯誤118032 錯誤338449

因此,基本上,這是一個無需解決的功能,無人問津,因此也許我該改用IntelliJ了。 我必須考慮一下……。

Emond Papegaaij在Bug 118032的討論中建議了以下解決方法:

一個簡單的解決方法是創建靜態方法,從要變為靜態的方法中調用此靜態方法,然后內聯該方法調用。 這在4.3.1中對我有效。

這很有趣,但同樣不會自動重構,並且首先會破壞重構的目的。 添加某人自己的代碼會導致失敗的可能性,並且需要重新運行測試套件,從而導致無法安全地重構遺留代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM