2016-05-01 13 views
2

私はjavabeanスタイルのクラスを実装していますが、getters/setterを取り除き、代わりにパブリックフィールドを使用したいとします。コンパイルを中断せずにIntelliJ 14を使って効果的にリファクタリングする方法はありますか?IntelliJリファクタリングのプロパティ(get/setter)をフィールドに追加できますか?

例 - 前:

class Baratheon { 
    private String stannis; 
    public String getStannis() { 
     return stannis; 
    } 
    public void setStannis(String stannis) { 
     this.stannis = stannis; 
    } 
} 

class Lannister { 
    public Lannister() { 
     Baratheon b = new Baratheon(); 
     b.setStannis("dead"); 
    } 
} 

--after:

class Baratheon { 
    public String stannis; 
} 

class Lannister { 
    public Lannister() { 
     Baratheon b = new Baratheon(); 
     b.stannis = "dead"; 
    } 
} 
+1

あなたがそれをやりたいのはなぜ?フィールドへのアクセスを許可するためのネイティブサポートを持つフィールド値や言語へのアクセスを制御する良い理由もあります*あなたのAPIを破ることなくgetter/setterに戻る手段を提供します。 Javaでは不可能です。誰かがあなたのフィールドにアクセスすると、APIを変更しなくてもそれを取り戻すことはできません。 – sisyphus

+1

私はその議論を避け、intellijの機能に焦点を合わせることを望んでいました – Nilzor

答えて

2

あなたのリファクタリングに関与明白な手順は以下のとおりです。

  1. は、フィールドを公開する、アクセサを保持しています。

  2. アクセスコードではなく、直接アクセスするクライアントコードを変更します。

  3. アクセサを削除します。

あなた私は、単一のリファクタリングツールがないと思うステップ2.

を支援するためのIntelliJの「インライン...」リファクタリング(Ctrlキー+ + Nシフト)を活用することができ影響を受けたコードベース全体が単一のプロジェクトに含まれている場合にのみ実際に可能であることを念頭に置いて、intellijは仕事全体を行います。 と書いて、仕事をするpluginと書いてみることができます。 (アンドロイドStudioで)リファクタリング/インラインを選択し、次にゲッターをクリック2.right

+0

インラインリファクタリングについて知りませんでした。 「Inline all invocationsを選択してメソッドを削除する(n occurences)」を選択すると、ほとんどの作業が実行されます。驚くばかり! – Nilzor

0

1.makeゲッター のと同じフィールドへのアクセス...

関連する問題