亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

IntelliJ 重構為內聯冗余數據類

IntelliJ 重構為內聯冗余數據類

月關寶盒 2023-09-27 10:28:10
是否有一系列 IntelliJ 自動重構可以消除多余的類 Foo?重構前:  public static class Foo {    private final String s;    public Foo(String s) {      this.s = s;    }    public String getS() {      return s;    }  }  private static void run() {    Foo f = new Foo("blah");    f.getS().length();    f.getS().getBytes();    Foo f2 = new Foo("blahg");    f2.getS().length();    f2.getS().getBytes();  }重構后:  private static void run() {    String f = "blah";    f.length();    f.getBytes();    String f2 = new "blahg";    f2.length();    f2.getBytes();  }在我的具體案例中進行自動重構的原因是現實生活中 Foo 被使用了幾千次。但我也只是感興趣。使用其他自動化步驟將代理對象獲取到 Foo 的狀態非常容易,但我只是不知道如何進行最后一點。爪哇intellij-idea重構自動重構
查看完整描述

2 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

不確定這在更通用的設置中如何工作,但我會:

  • 重構Foo以將名稱更改getS為非常獨特的名稱,例如XXXXXXXXX

  • 字符串替換.XXXXXXXXX()為空字符串

  • 正則表達式 stringn 替換Foo (\w+) = new Foo\("(\w+)"\);String $1 = "$2";

這將處理該run方法中的所有內容?,F在您只需要手動刪除Foo,雖然這不是 IntelliJ 重構,但它只需要在一個地方完成,因此可能是可以接受的。


查看完整回答
反對 回復 2023-09-27
?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

更安全的方法是使用結構替換

  • 在菜單中搜索結構替換

  • $Instance$.getS().$MethodCall$($Parameter$)在搜索框中輸入

  • 在 $Instance$ 上添加一個過濾器,使其僅成為 Foo 的實例

  • 用。。。來代替:$Instance$.getS().$MethodCall$($Parameter$)

  • 之后,您可以繼續進行結構替換并查找所有實例,然后替換它們,但運行并創建從類到“String”的Migrate自定義類型映射會更容易Foo

  • 如果您想再次使用結構替換,您可以使用類似的內容進行查找和替換

    • Foo $name$ = new Foo($Parameter$);

    • String $name$ = $Parameter$;


查看完整回答
反對 回復 2023-09-27
  • 2 回答
  • 0 關注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號