フィールドのカプセル化
フィールドのカプセル化リファクタリングでは、データを非表示にして必要なアクセサーを作成できます。
データを隠し、アクセサーメソッドに基づく外向きインターフェースを通してアクセスすることは良い考えです。 後で、クラスに依存するコードと利用可能なメソッドとの完全な互換性を維持しながら、データ内部を変更することができます。
エディターで、キャレットをクラス、目的のフィールド、リファクタリングするクラス内の任意の場所に配置します。 (選択には プロジェクト ツールウィンドウまたは 構造ビュー を使用することもできます。)
メインメニューまたはコンテキストメニューから、 を選択します。
表示されるダイアログで、アクセサーを作成するフィールドをチェックし、getter または setter のどちらを作成するかを指定します。 さらに、すべてのフィールドの出現箇所を適切なアクセサーメソッドの呼び出しに置き換える場合は、 フィールドがアクセス可能な場合でもアクセサーを使用 を選択します。 表示オプションを選択することもできます。
サンプル
前 | 後 |
|---|---|
//File Class.java
public class Class {
public String aString;
}
|
//File Class.java
public class Class {
private String aString;
public void setaString(String aString) {
this.aString = aString;
}
public String getaString() {
return aString;
}
}
|
//File AnotherClass.java
public class AnotherClass {
public Class aClass;
public void method() {
aClass.aString="string";
}
}
|
//File AnotherClass.java
public class AnotherClass {
public Class aClass;
public void method() {
aClass.setaString("string");
}
}
|
フィールドのカプセル化ダイアログ
このダイアログを使用して、 フィールドのカプセル化 リファクタリングのオプションを指定します。
項目 | 説明 |
|---|---|
カプセル化するフィールド | この領域で、アクセサーを作成するフィールドを選択します。 デフォルトの名前をそのまま使用することも、名前を変更することもできます。 リファクタリングしているクラスに同じシグネチャーを持つメソッドがすでに存在する場合、 メソッド アイコン ( 既存のメソッドがアクセサーとして機能するかどうかを確認する必要があります。 そうでない場合は、 フィールドのカプセル化 リファクタリングを再度使用する前に、アクセサーの名前を変更するか、既存のメソッドを変更する必要がある場合があります。 新しいアクセサーが親クラスのメソッドをオーバーライド ( |
アクセス権の取得 / アクセスの設定 | このオプショングループを使用して、選択したフィールドにどのアクセサーメソッド(Getter、Setter、両方)を作成するかを選択します。 チェックボックスの 1 つを選択解除すると、フィールドをカプセル化するテーブルの対応する列(Getter または Setter)全体が無効になります。 |
カプセル化したフィールドの可視性 | ここでは、選択したフィールドの新しい表示範囲を指定できます |
オプション | フィールドがアクセス可能である場合でもアクセサーを使用するかどうかを選択します。 フィールドがアクセス可能な場合でもアクセサーを使用する オプションが有効になっていない場合、フィールドに直接アクセスできる場合、目的のフィールドへの参照は変更されません。 それ以外の場合、必要なフィールドへのすべての参照はアクセサー呼び出しに置き換えられます。 また、オプショングループ カプセル化したフィールドの可視性 での選択にも依存します。 例: オプション フィールドがアクセス可能な場合でもアクセサーを使用する のチェックを外し、フィールドの プライベート可視性を選択した場合、クラス外のフィールドの使用箇所は変更されますが、クラス内では同じままです。 |
アクセサーの可視性 | この領域では、作成されたアクセサーメソッドの表示範囲を選択します。 |