Pull Upフィールド、メソッドをスーパークラスに引き上げることができます。
リファクタリング例で、LineCreaterクラスとRectCreaterクラスから、
panelフィールドを引き上げたシーンを思い出してください。
面倒なステップを実行しましたよね。 拡大できます |
スーパークラスであるCreaterクラスでは、
引き上げられたpanelフィールドが追加されていることが見て取れます。
privateだったフィールドが、protectedになっています。当たり前ですが、使っていてやっぱり便利です。 拡大できます |
Self Encapsulateフィールドをカプセル化できます。カプセル化したいフィールドを選択して、 [Refactor]-[Self Encapsulate]と選択すると、図のようなダイアログがでます。 setter/getterを作成するだけでなく、メソッドを挿入する位置まで指定することができます。 さらに、クラス中でのフィールドへのアクセスを作成したメソッドに置き換えることも可能です。 |
------------------------------------------ [変更前] public void create(Point point) { … store.removeRubberEntity(line); … } ------------------------------------------ [変更後] public void create(Point point) { … store.removeRubberEntity(getLine()); … } private void setLine(Line2D line) { this.line = line; } private Line2D getLine() { return line; } ------------------------------------------ Renameクラス名、フィールド名、メソッド名、変数名を変更できます。カプセル化の例で用いたフィ ールドlineをshapeに変更します。lineフィールドを選択し、[Refactor]-[Rename]と選択 すると、図のようなダイアログがでます。チェックボックスで指定すると、setter/getter の名前も変更(指定した名前によって自動的に命名されます)することができます。これも とても便利ですが、引数名までは変更されなかったので少し残念です。 ------------------------------------------ [変更前] private Line2D line; private void setLine(Line2D line) { this.line = line; } private Line2D getLine() { return line; } ------------------------------------------ [変更後] private Line2D shape; private void setShape(Line2D line) { this.shape = line; } private Line2D getShape() { return shape; } ------------------------------------------ Extract Methodメソッドを抽出できます。 抽出したい部分を選択し、[Refactor]-[Extract Method]と選択すると、 図のようなダイアログがでます。ここで、メソッド名と可視性を指定します。 また、引数が自動的に付加されますが、名称等を編集することが可能です。 「リファクタリングしてみよう」の例とは少し異なりますが、 "resetRectangle((Rectangle)rubber, point);"の1行を抽出しています。 ------------------------------------------ [変更前] public void aid(Point point) { resetRectangle((Rectangle)rubber, point); if (panel != null) panel.repaint(); } ------------------------------------------ [変更後] public void aid(Point point) { resetShape(point); if (panel != null) panel.repaint(); } protected void resetShape(Point point) { resetRectangle((Rectangle)rubber, point); } ------------------------------------------ |