プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle JDeveloperによるアプリケーションの開発
12c (12.1.3)
E57556-02
  目次へ移動
目次

前
 
次
 

8 Javaコードの使用

この章では、Javaアプリケーションのコード作成に役立つJDeveloperの各種ツールと機能の効果的な使用方法について説明します。たとえば、アプリケーション内のJava要素は、JDeveloperダイアログを使用して参照することも、Javaソース・エディタで開いているファイルから直接参照することもできます。Javaコードを直接編集するには、ソース・エディタが使用できます。Javaコードを表すダイアグラムを表示するには、ビジュアル・エディタを使用します。たとえば、フレーム・コンポーネントは長方形のボックスとして表示され、ボタンはフレームの最上部に小さ目のボタンとして表示されます。

リファクタとは、プログラムの動作を変更することなくコード構造を変更する編集上の技術です。「リファクタ」は、プログラムのソース・コードを変更して保持、拡張または再利用しやすくする場合に役立ちます。

この章の内容は次のとおりです。

8.1 Javaコードの使用について

通常は、Javaソース・エディタを使用してJavaコードの作成または編集を行います。これには、コーディングの強化を目的としたJava固有の機能が組み込まれています。たとえば、JDeveloperでは、事前定義コード・テンプレートを使用したコーディング、Javadocコメントの追加、ユーザーのコードへのフォーマット追加でさえも容易に実行できます。これらの機能は、コンテキスト・メニューまたは「ソース」メイン・メニューから使用できます。詳細は、第3.8.2項「ソース・エディタの使用方法」を参照してください。

Javaソース・エディタの動作は、「プリファレンス」ダイアログでプリファレンスを指定することでカスタマイズできます。詳細は、第3.8.3項「ソース・エディタのプリファレンスの設定方法」を参照してください。

8.2 Javaコードでのナビゲート

JDeveloperには、生産性の向上に役立つJava対応編集機能が数多く用意されています。プロジェクトのクラスとインタフェースおよびそのメンバーのソース・コードを検索し、その場所に移動するための機能があります。JDeveloperには、Javaソース・エディタでクラス定義のメンバーからメンバーまでステップ実行できるキーボード・アクセラレータも組み込まれています。

8.2.1 Java要素の参照方法

JDeveloperでの作業中、JDeveloperダイアログを使用して、またはJavaソース・エディタで開いているファイルから直接、Java要素を参照できます。特定タイプのソース・コードまたはJavadocの検出も可能です。

プロジェクトのソース・パスにあるクラスのソースが表示されます。ライブラリにソースが含まれている場合は、プロジェクト・ライブラリにあるクラスのソースも表示されます。

8.2.1.1 JDeveloperでのJava要素の直接参照

図8-1に示すJDeveloperダイアログでJava要素を参照できます。

図8-1 「Javaタイプに移動」ダイアログ

この図は周囲のテキストで説明しています

JDeveloperでJava要素を参照するには: 

  1. メイン・メニューから「ナビゲート」「Javaタイプに移動」を選択します。

    キーボードのショートカット、[Ctrl]キーとマイナス記号を使用することもできます。

  2. 「Javaタイプに移動」ダイアログで、検索するJavaクラスまたはインタフェースの名前を入力します。

    このフィールドでテキストの入力を開始すると、テキストに一致するJavaエンティティのリストが表示されます。たとえば、jを入力すると、java.langが含まれているクラスのリストが表示されることがあります。

    「Javaタイプに移動」ダイアログで返された結果をドリルダウンできます。たとえば、java.langクラスをダブルクリックすると、java.lang.Byteなどのメソッドが表示されます。

  3. リストでエンティティをダブルクリックすると、エンティティがソース・エディタに開きます。

8.2.2 変数、クラスまたはメソッドの宣言の検索方法

Javaソース・エディタでの作業中、任意の識別子の宣言を簡単に検索できます。

コード要素の宣言に移動するには、次のようにします。

  • コード要素を右クリックし、「宣言に移動」を選択します。または、

  • [Ctrl]を押しながら、コード要素を左クリックします。

選択した要素のソース・コードが開き、宣言文がハイライト表示されます。

図8-2 強調表示された宣言

この図は周囲のテキストで説明しています

宣言が同じファイルにある場合は、カーソルがその宣言まで移動して、強調表示されます。宣言が別のファイルにある場合は、Javaソース・エディタ内でソース・ファイルによって宣言が開かれます。カーソルがその宣言まで移動して、強調表示されます。

8.2.3 クラスまたはインタフェースの使用方法の検索方法

Javaソース・エディタでの作業中、クラスやインタフェースへの参照およびそのメンバーを簡単に検索できます。デフォルトでは、現在のプロジェクトおよび依存プロジェクトの使用方法が報告されます。ライブラリのソース・ファイルにアクセス可能な場合は、検索対象をライブラリにまで拡大できます。

クラスの使用方法を検索するには、次のようにします。

  1. 次のいずれかの方法で、クラスまたはインタフェースを選択します。

    • Javaソース・エディタで、名前を選択します。

    • 「アプリケーション」ウィンドウまたは「構造」ウィンドウで、クラスまたはインタフェースを選択します。

  2. 次のいずれかの方法で、コマンドを起動します。

    • 「検索」「使用方法の検索」を選択します。

    • 右クリックして「使用方法の検索」を選択します。

    • [Ctrl]キーと[Alt]キーを押しながら[U]キーを押します。

      「<オブジェクト>の使用方法」ダイアログが開きます。

  3. 「検索」ボックスで、検索で返される参照のタイプを選択します。

  4. 「条件」ボックスで、検索対象とするオプションの追加領域を定義します。

  5. 検索の出力を設定するには、「新規タブ」を選択して、新規使用方法ログに出力します。

    選択しないと、使用方法に対する直前の検索の結果が存在する場合は、その結果が破棄されます。

  6. 「OK」をクリックします。

    結果が使用方法ログ・ウィンドウに表示されます。

8.2.4 メソッドの使用方法の検索方法

このダイアログを使用すると、Javaソース・エディタで作業するとき、メソッドへの参照を迅速に検索できます。

検索によって、メソッドが定義されているクラスまたはインタフェースのインスタンスへの適用が表示されます。また、メソッドを継承するサブクラスまたはサブインタフェースが存在する場合は、それらのインスタンスへの適用も表示されます。

メソッドの使用方法を検索するには、次のようにします。

  1. 次のいずれかの方法で、メソッドを選択します。

    • Javaソース・エディタで、名前を選択します。

    • 「構造」ペインでメソッドを選択します。

  2. 次のいずれかの方法でコマンドを起動します。

    • 「検索」「使用方法の検索」を選択します。

    • 右クリックして「使用方法の検索」を選択します。

    • [Ctrl]キーと[Alt]キーを押しながら[U]キーを押します。

      <メソッド>の使用方法」ダイアログが表示されます。このダイアログには、使用方法を検索するために指定できる様々なオプションがあります。

    • ダイアログでオプションを指定し、「OK」をクリックして検索を開始します。

8.2.5 フィールドの使用方法の検索方法

Javaソース・エディタでの作業中、フィールドへの参照を簡単に検索できます。

検索によって、メソッドが定義されているクラスまたはインタフェースのインスタンスに存在するフィールドの参照が表示されます。また、そのフィールドを継承するサブクラスまたはサブインタフェースが存在する場合は、それらのインスタンスの参照も表示されます。

フィールドの使用方法を検索するには、次のようにします。

  1. 次のいずれかの方法で、フィールドを選択します。

    • Javaソース・エディタで、名前を選択します。

    • 「構造」ペインでフィールドを選択します。

  2. 次のいずれかの方法でコマンドを起動します。

    • 「検索」「使用方法の検索」を選択します。

    • 右クリックして「使用方法の検索」を選択します。

    • [Ctrl]キーと[Alt]キーを押しながら[U]キーを押します。

  3. 「<オブジェクト>の使用方法」ダイアログに入力し、「OK」をクリックします。検索を他の領域に拡張するオプションの指定、検索範囲の定義およびオプションで結果をログ・ウィンドウの新しいタブに表示する指定を行うことができます。

    検索が開始され、結果が「<Object>の使用方法」の「ログ」ウィンドウに表示されます。

8.2.6 ローカル変数またはパラメータの使用方法の検索方法

Javaソース・エディタでの作業中、メソッド本体のローカル変数またはパラメータへの参照を簡単に検索できます。抽出したコードで使用されていたローカル変数およびパラメータは、新しいメソッドのパラメータになります。

ローカル変数またはパラメータの使用方法を検索するには、次のようにします。

  1. Javaソース・エディタで変数名またはパラメータ名を選択します。

  2. 次のいずれかの方法でコマンドを起動します。

    • 「検索」「使用方法の検索」を選択します。

    • 右クリックして「使用方法の検索」を選択します。

    • [Ctrl]キーと[Alt]キーを押しながら[U]キーを押します。

      結果が使用方法ログ・ウィンドウに表示されます。

8.2.7 オーバーライド済または実装済メソッド定義の特定

Javaソース・エディタでの作業中、スーパークラスの定義をオーバーライドまたは実装するメソッドを特定できます。オーバーライドする定義には、図8-3に示すように、「オーバーライド」上矢印アイコンが付きます。

図8-3 「オーバーライド」アイコン

この図については周囲のテキストで説明しています。

オーバーライド済の定義には、図8-4に示すように、Javaソース・エディタのマージンに「実装」マージン・アイコンが付きます。

図8-4 「実装」アイコン

この図については周囲のテキストで説明しています。

オーバーライドされたメソッド定義を表示するには、マージンの「オーバーライド」アイコンをクリックします。オーバーライドされたメソッド定義を表示するには、マージンの「実装」アイコンをクリックします。

「メイン・ツールバー」の「戻る」ボタンをクリックすると、前のビューに戻ります。

8.2.8 クラスまたはインタフェースの階層の表示方法

Javaソース・エディタでの作業中、クラスまたはインタフェースのサブタイプおよびスーパータイプの階層をインスペクトできます。

エディタには、ノードのGUI階層全体が表示されます。表示の方法は、この階層がメニュー項目またはメニュー以外の項目のどちらで構成されるかによって異なります。

8.2.8.1 Javaソース・エディタでのクラスまたはインタフェースの階層表示

「階層」ウィンドウには、選択したクラスまたはインタフェースの階層が表示されます。

Javaソース・エディタでクラスまたはインタフェースの階層を表示するには、次のようにします。

  1. クラスまたはインタフェースを選択し、右クリックして「タイプ」を選択するか、「ナビゲート」「タイプ」を選択します。

    「タイプ」ウィンドウが開き(まだ開かれていない場合)、サブタイプまたはスーパータイプのツリーが表示されます。

  2. サブタイプおよびスーパータイプの表示と非表示を切り替えるには、「サブタイプ階層」ボタンまたは「スーパータイプ階層」ボタンをクリックします。

8.2.9 クラスのメンバーのステップ実行

キーボード・アクセラレータを使用すると、Javaソース・エディタで、クラス定義内でメンバー間を移動できます。

  • 現在のJavaソース・ビューの次のメンバー定義または宣言に移動するには、[Alt]キーを押しながら[↓]キーを押すか、または「ナビゲート」「次のメンバーに移動」を選択します。

  • 現在のJavaソース・ビューの1つ前のメンバー定義または宣言に移動するには、[Alt]キーを押しながら[↑]キーを押すか、または「ナビゲート」「前のメンバーに移動」を選択します。

次のコード実行コマンドも定義されますが、デフォルトのアクセラレータには割り当てられないため、次の「ナビゲート」メニューから利用できません。

  • 次のクラスに移動

  • 次のフィールドに移動

  • 次のメソッドに移動

  • 前のクラスに移動

  • 前のフィールドに移動

  • 前のメソッドに移動

これらのコマンドは、「プリファレンス」ダイアログの「ショートカット・キー」ページの「ナビゲート」カテゴリにリストされます。アクセラレータは追加または変更できます。詳細は、第3.5.1項「IDEでのショートカット・キーの使用方法」を参照してください。

8.3 Javaコードの編集

JDeveloperには、生産性の向上に役立つJava対応編集機能が数多く用意されています。グラフィカル・ユーザー・インタフェースを開発する場合は、テキスト編集のかわりにJava Visual Editorを使用できます。ソース・エディタとビジュアル・エディタは同期しているため、片方を変更すると、ただちにもう一方に反映されます。これらのJava編集機能によって、あらゆるテクノロジのコーディングをサポートする汎用ソース編集機能が強化されています。

8.3.1 新規Javaコードまたはインタフェースの作成方法

新規のクラスまたはインタフェースを作成する前に、まずアプリケーションとプロジェクトを作成する必要があります。クラスまたはインタフェースが作成されると、それはアクティブなプロジェクトに追加され、デフォルトではJavaソース・エディタに表示されます。また、「アプリケーション」ウィンドウでそれにアクセスすることもできます。

新規クラスを作成し、プロジェクトに追加するには、次のようにします。

  1. 「アプリケーション」ウィンドウで、Javaクラスを追加するプロジェクト、たとえばclientを選択します。

  2. 右クリックして、「新規」「Javaクラス」を選択します。

  3. Javaクラスの作成ダイアログで、クラス名またはインタフェース名、パッケージ名、および新しいクラスが拡張するスーパークラスを入力します。

  4. 必要に応じて属性を選択します。

  5. 「OK」をクリックします。

8.3.2 Javaインタフェースの実装方法

ソース・エディタでは、フレームワーク・コードを追加し、インタフェースを実装するターゲット・クラスを変更したり、ターゲット・インタフェースを別のインタフェースに簡単に拡張できます。

implements句またはextends句がターゲット・クラスまたはターゲット・インタフェースの宣言に追加され、import文がファイルに追加されます。ターゲットがクラスである場合には、実装されるインタフェースの各メソッドについてスタブ定義がクラスまたはインタフェースの本体に追加されます。

インタフェースを実装するには、次のようにします。

  1. Javaソース・ファイルを開きます。

  2. メイン・メニューから「ソース」「インタフェースの実装」を選択します。

  3. 「検索」タブまたは「階層」タブで、インタフェースの実装先となるクラスを検索し、実装するインタフェースの名前を選択します。

  4. オーバーライドされるメソッドからドキュメント・コメントを組み込む場合は、「Javadocのコピー」を選択します。

  5. 「OK」をクリックします。

8.3.3 メソッドのオーバーライド方法

ソース・エディタでは、スーパークラスから継承したメソッドをオーバーライドするためのスタブ定義をクラスに迅速に追加できます。オーバーライドするサブクラスによってメソッドの特定の実装が指定されますが、これはそのスーパークラスの1つですでに指定されています。

メソッドをオーバーライドするには:

  1. Javaソース・ファイルを開きます。

  2. メイン・メニューから「ソース」「メソッドのオーバーライド」を選択します。

  3. 「メソッド」リストで、オーバーライドするメソッドを選択します。

    リストには、すべてのスーパークラスから継承されるメソッドが表示されます。abstractメソッドは太字で表示されます。これらはnon-abstractタイプによって実装される必要があります。

  4. オーバーライドされるメソッドからドキュメント・コメントを組み込む場合は、「Javadocのコピー」を選択します。

  5. 「OK」をクリックします。

    スタブ・メソッド定義がクラスに追加されます。

  6. スタブ定義を編集します。

8.3.4 匿名内部クラスのラムダ式への変換方法

ラムダ式では、1つのメソッドのみが含まれる匿名内部クラスのインスタンスを、よりコンパクトなフォームで表現するためのメカニズムが用意されているため、コーディングを簡略化できます。このようなクラスは機能インタフェースになるという要件を満たす場合にのみ変換できます。つまり、ラムダ式がメソッドへの引数として使用されるときに、タイプがメソッド・パラメータに使用できるような場合です。


注意:

この機能は、プロジェクトのターゲットJDKとしてJDK 1.8を指定した場合にのみ利用できます。

内部クラスをラムダ式に変換するには:

  1. Javaソース・エディタで、変換する匿名クラスを選択します。

    IDEはコードを解析して、コード・アシストが適用可能かどうかを確認します。

  2. エディタのマージンに表示されるコード・アシスト・アイコンをクリックします。

  3. コード・アシストの「匿名内部クラスをラムダ式に変換します」をクリックします。

    ラムダ式で内部クラスが置き換えられます。

詳細は、http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html">>http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.htmlを参照してください

この機能は、「プリファレンス」ダイアログで有効と無効を切り替えることができます。この機能はデフォルトで有効になっていることに注意してください。

この機能を無効にするには:

  1. 「ツール」「プリファレンス」に移動して、「監査」ノードをクリックします。

  2. 「監査」ページで、「プロファイルの編集」をクリックします。

  3. 「コード・アシスト」タブをクリックします。

  4. 「コード・アシスト」のカテゴリ・ノード「Java SE」「Java」「コード・アシスト」を開きます。

  5. 機能を利用不可にするには、「適格なラムダ式」の選択を解除します。

    機能をコード・アシストから利用できるようにする場合に選択します。

8.3.5 コード・テンプレートの使用方法

JDeveloperには、一般的によく使用される文のテキストを挿入することで、より迅速かつ効率的にコードを記述するのに役立つ事前定義コード・テンプレートが用意されています。たとえば、Iterate over a list (itli)テンプレートでは、次のコードが挿入されます。

for (Object object : Object) {
            ;
       }

注意:

テンプレートに変数が含まれている場合、変数はハイライト表示されています。各変数を編集して、テンプレートを完成できます。[Tab]を押すと、カレットが次のテンプレート変数に移動します。

ショートカットを使用すると、必要なテンプレートを迅速に選択できます。ソース・ファイル内の任意の位置で[Ctrl]キーを押しながら[Enter]キーを押すと、選択可能なコード・テンプレートのリストが表示されます。このリストに表示されるテンプレートはコンテキストに応じて決定され、現在の位置に適したテンプレートのみが表示されます。このリストの右下端にある「QuickDoc」をクリックして、選択したコード・テンプレートの構造を表示できます。たとえば、forループに既存のテンプレートを使用した場合は、forを入力し、(デフォルト・キーマップの場合)[Ctrl]を押しながら[Enter]を押します。

JDeveloperで提供されるテンプレート以外に、独自のコード・テンプレートを定義することもできます。「プリファレンス」ダイアログの「コード・エディタ」→「コード・テンプレート」ページを使用します。詳細は、第3.8.4項「ソース・エディタのコード・テンプレートをカスタマイズする方法」を参照してください。

定義済のコード・テンプレートを起動するには、次のようにします。

  1. エディタでファイルを開き、テンプレートを挿入する位置にカーソルを置きます。

  2. テンプレートに関連付けられているショートカットを入力し、[Ctrl]を押しながら[Enter]を押します。

    テンプレート内に定義されているコードがソース・ファイルに挿入されます。テンプレートに必要なimport文がある場合は、ファイルの先頭に挿入されます。


注意:

[Ctrl]+[Enter]は、デフォルトのキーマップで割り当てられているアクセラレータです。別のキーを割り当てることもできます。

8.3.6 事前定義済のコード・テンプレートの使用

JDeveloperに用意されている事前定義コード・テンプレートは次のとおりです。

配列イテレータ

ai
for (int $i$ = 0; $i$ < $array$.length; $i$++)
{
    $type$ $var$ = $array$[$i$];
    $end$
}

データ・アクションのイベント・ハンドラ

daev
public void on$end$(PageLifecycleContext ctx)
{
}

forループ

for
for ($end$ ; ; ) 
{
}

if文

if
if ($end$) 
{
}

if else文

ife
if ($end$) 
{

} else
{

}

整数に基づいたループ

fori
for (int $i$ = 0; $i$ < $lim$; $i$++) 
{
   $end$
}

整数に基づいたループ

forn

int $n$ = $lim$;
for (int $i$ = 0; $i$ < $n$; $i$++) 
{
   $end$
}

instanceof + cast

iofc
if ($var$ instanceof $type$)
{
     $type$ $casted$ = ($type$) $var$;
     $end$
}

BC4Jアプリケーション・モジュールのインスタンス化

bc4jclient

String amDef = "test.TestModule";
String config = "TestModuleLocal";
ApplicationModule am =
Configuration.createRootApplicationModule(amDef,config);
ViewObject vo = am.findViewObject("TestView");
$end$// Work with your appmodule and view object here
Configuration.releaseRootApplicationModule(am,true); 

配列の繰返し

itar

for (int $i$ = 0; $i$ < $array$.length; $i$++)
{
     $type$ $var$ = $array$[$i$]; 
     $end$
}

コレクションの繰返し

itco

for(Iterator $iter$ = $col$.iterator();$iter$.hasNext();)

{
     $type$ $var$ = ($type$) $iter$.next();
     $end$
}

リストの繰返し

itli
for (int $i$ = 0; $i$ < $list$.size(); $i$++)
{
     $type$ $var$ = ($type$) $list$.get($i$);
     $end$
}

マップ・キーの繰返し

itmk

Iterator $iter$ = $map$.keySet().iterator();
while ($iter$.hasNext())
{
     $type$ $var$ = ($type$) $iter$.next();
     $end$
}

マップ値の繰返し

itmv

Iterator $iter$ = $map$.values().iterator();
while ($iter$.hasNext())
{
     $type$ $var$ = ($type$) $iter$.next();
     $end$
}

JDBC接続

conn

public static Connection getConnection() throws SQLException
{
     String username = "$end$scott";
     String password = "tiger";
     String thinConn = "jdbc:oracle:thin:@localhost:1521:ORCL";
     Driver d = new OracleDriver();
     Connection conn = 
DriverManager.getConnection(thinConn,username,password);
     conn.setAutoCommit(false);
     return conn;
}

List to配列

ltoar

$type$ $var$ = new $typeelem$[$list$.size()];
$var$ = ($type$) $list$.toArray($var$);
$end$ 

mainメソッド

main

public static void main(String[] args)
{
     $end$
}

out.println()

outp

out.println($end$); 

private ArrayList

pral

private ArrayList _$end$ = new ArrayList(); 

private boolean

prb

private boolean _$end$; 

private HashMap

prhm

private HashMap _$end$ = new HashMap(); 

private int

pri

private int _$end$; 

private String

prs

private String _$end$; 

public static final

pusf

public static final $end$; 

public static final boolean

pusfb

public static final boolean $end$; 

public static final int

pusfi
public static final int $end$; 

public static final String

pusfs

public static final String $end$; 

反対方向の配列イテレータ

ritar

for (int $i$ = $array$.length; --$i$ >= 0 ;)
{
    $type$ $var$ = $array$[$i$];
    $end$
}

反対方向のリストの繰返し

ritli

for (int $i$ = $list$.size(); --$i$ >= 0 ; )
{
     $type$ $var$ = ($type$) $list$.get($i$);
     $end$
}

System.err.println

sep
System.err.println($end$); 

System.out.println

sop

System.out.println($end$); 

switch文

sw

switch ($end$) 
{
    case XXX:
       {
       }
    break;
    default;
      {
      }
    break;
}

try文

try

try
{
   $end$
} catch (Exception ex) 
{
  ex.printStackTrace();
} finally 
{
}

タグの挿入

tag

<$tag$>
  $end$
</$tag$>

while文

wh

while ($end$) 
{

}

8.3.7 選択したテキストを拡張または縮小する方法

「選択の拡大」または「選択の縮小」オプションを使用すると、Java構文に基づいて、選択したコード・ブロックを連続して拡大または縮小できます。このオプションを連続して適用すると、適用するたびに、開始位置に基づいて、Javaの階層で上にある次の論理ステップが含まれるように、選択が拡大されます。このことは、ファイル全体が選択されるまで行われます。たとえば、メソッド名、修飾されたメソッド・コール、割当て、定義などです。

選択したコードを拡大するには、次の手順を実行します。

  1. エディタでファイルを開いた状態で、エディタにフォーカスがあることを確認します。

  2. 選択を拡大する位置にカーソルを置くか、またはコードの一部を選択します。

  3. メイン・メニューから「ソース」「選択の拡大」を選択するか、[Ctrl]と[Shift]を押しながら[=]キーを押します。

    前に選択した要素または前にカーソルを置いた要素を含む最小論理単位が含まれるように、選択が拡大されます。

「選択の縮小」オプションを使用すると(または、[Ctrl]および[Shift]を押しながら[-]を押すと)、選択したコードは同様に連続して縮小されます。

8.3.8 コーディング構造でコードを囲む方法

Javaソース・エディタでは、コーディング構造を使用して簡単にJavaの文およびブロックを囲むことができます。

コーディング構造でコード・ブロックを囲むには、次のようにします。

  1. エディタでファイルを開いた状態で、文内で右クリックするか、またはコード・ブロックを選択してから、「囲む」を選択します。このオプションを使用可能にするには、ビジュアル・エディタで右クリックして、ポップアップ・メニューから「囲む」を選択します。または、ソース・エディタのツールバーの「囲む」({})アイコンをクリックします。


    注意:

    このアイコンは、選択したコードが「コードを囲む」機能を適用できる有効なコード・ブロックである場合にのみ有効です。

  2. 「コードを囲む」ダイアログで、コーディング構造を選択します。

「プリファレンス」ダイアログの「コード・テンプレート」ページで、コード構成を設定できます。コード・テンプレートを必要に応じてカスタマイズしたり、既存のテンプレートを変更できます。詳細は、第3.8.4項「ソース・エディタのコード・テンプレートをカスタマイズする方法」を参照してください。

8.3.9 コード折りたたみ方法

コード折りたたみ機能を使用して、現在Javaソース・エディタで開いているファイルの各セクションを表示および非表示にすることができます。コード折りたたみにより、判読性が改善され、選択したコード・ブロックを折りたたむことで、機能定義などの特定の領域を表示できます。

コード折りたたみを使用するには、次のようにします。

  • JavaScriptエディタでテキストの最初の列の左側にある「-」記号をクリックします。

    これにより、選択した要素のコードが折りたたまれ、「-」記号が「+」に変化します。

  • [+]記号をクリックしてコードを展開し、前に閉じていたエリアの全コンテンツを表示します。

マージンの記号と記号の間を右クリックしてコンテキスト・メニューを開きます。このメニューでは、コマンドを選択して、ファイル全体にわたってコードの特定領域を開いたり、折りたたんだりすることができます。

例8-1に示すようなコードがメソッドの中にある場合、コードの中央のチャンクを縮小して、メソッドの別の部分を使用している間は中央のチャンクを見ないで済むように設定できます。

例8-1 コード折りたたみの例

public void main(String[] args) throws SQLException, IOException {
 
        //... some code ...
 
        {
          Run.dbgPrnt("Extractor main() querying => BSN");
          // make the basin file
          query = "select * from BSN";
          rset = OracleAccess.makeResultSet(query, stmt);
          rset.next();
          l = Basin.extract(rset, Version);
          Format.writeFile(outPath, "groupings.txt", l);
        }
 
//      ... some more code ...
 
  Run.dbgPrnt("Extractor main() has ended");
}

内部コード・ブロック(for、while、switch、{...}など)のコードを折りたたむことができます。

8.3.10 import文の追加

Javaソース・エディタでの作業中に、必要なimport文を追加できます。ソース・エディタでの入力中に、まだインポートされていないクラスへの参照を導入すると、そのクラスの下に波線が表示されます。インポートが必要であることを示すポップアップが開き、クラスの完全修飾名が表示されます。

図8-5 必要なimport文

この図については周囲のテキストで説明しています。

クラスへの未解決の参照の完全一致を1つのみ検出できた場合は、JDeveloperによってインポートが自動的に追加されます。インポート・アシスタンスによって一致の可能性が複数検出された場合は、クラス・パスからすべての一致の可能性がポップアップ・リストに表示されます。その場合は、適切なインポートを選択すると、そのimport文が自動的に追加されます。

Import Assistanceのポップアップは、[Alt]を押しながら[Enter]を押すことで、いつでもトリガーできます。

左余白をベースとするコード・アシスタンスを使用して、import文を追加できます。エディタによってクラスが認識されない場合は、行がハイライト表示されたときに電球が左余白に表示され、様々なインポート・オプションが表示されます。

Import Assistanceを構成するか無効にするには、Javaソース・エディタでimport文オプションを設定できます。

8.3.11 import文の編成方法

Javaソース・エディタでは、簡単にimport文を編成できます。「設定」ダイアログで、インポートを編成するためのオプションを設定します。次のオプションがあります。

  • パッケージ名およびクラス名でアルファベット順にimport文をソートおよびグループ化します。

  • パッケージ用のtype-import-on-demand文を個々のクラス用のsingle-type-import文に置き換えて、インポートを縮小します。

  • ある共通パッケージのクラスの2つ以上のsingle-type-import文をそのパッケージの1つのtype-import-on-demand文に置き換えて、インポートを拡大します。

  • 参照されないクラスに対するimport文を削除します。

インポート編成オプションを設定または無効にできます。

ソース・ファイルでimport文を編成するには、次のようにします。

  • エディタでファイルを開いた状態で、右クリックして「インポートの編成」を選択します。

8.3.12 ojformatの使用方法

ojformatはコマンド行ツールであり、ワークスペースまたはプロジェクトの再フォーマット化に使用できます。これは、<JDeveloper_Home>/jdev/binに置かれています。

ojformatの構文は次のとおりです。

ojformat option file

意味は次のとおりです。

optionは、-adeなどのオプションです。-adeは、バージョン・コントロール用にADE拡張機能をロードする必要があることを示しています。その他のバージョン・コントロールは自動的に機能します。

ojformat -ade application.jws

application.jwsにあるすべてのプロジェクトを再フォーマット化します。バージョン・コントロールはADEです。

ojformat application1.jws application2.jws

両方のアプリケーションにあるプロジェクトをすべて再フォーマット化します。

ojformat application.jws project1.jpr

application.jwsのproject1.jprを再フォーマット化します。

ojformat app1.jws project1.jpr app2.jws project2.jpr

app1のproject1とapp2のproject2を再フォーマット化します。

8.3.13 Javaビジュアル・エディタでの編集

図8-6に示すように、Javaビジュアル・エディタには、ユーザー・インタフェースのビジュアル・コンポーネントが「設計」タブに表示されます。

図8-6 Javaビジュアル・エディタの「設計」ビュー

この図は周囲のテキストで説明しています

ビジュアル・クラスのJavaソース・ビューを表示するには、図8-7に示すように「ソース」タブをクリックします。

図8-7 Javaビジュアル・エディタの「ソース」ビュー

この図については周囲のテキストで説明しています。

Javaビジュアル・エディタが開いている場合、図8-8に示すように、その対応する要素が「構造」ウィンドウに階層表示されます。

図8-8 Javaファイルの「構造」ウィンドウ

この図は周囲のテキストで説明しています

「プロパティ」ウィンドウが開いている場合、「構造」ウィンドウまたはJavaビジュアル・エディタで要素を選択すると、「プロパティ」ウィンドウの選択内容も変更されます。

Javaビジュアル・エディタ内の任意の場所を右クリックすると、コマンドのポップアップ・メニューが表示されます。ポップアップ・メニューは、メニュー以外の項目またはメニュー項目のどちらを編集しているかによって異なります。また、ポップアップ・メニュー内で使用できるコマンドは、選択したオブジェクトによって異なります。

Javaビジュアル・エディタを開くには:

「アプリケーション」ウィンドウでJavaファイルをダブルクリックし、エディタ・ウィンドウで「設計」タブをクリックします。

ソース・コードがソース・エディタ内でアクセス可能になります(「ソース」タブをクリックしてソース・コードを表示)。これにより、UI設計と並行してソース・コードを表示および編集できます。Javaビジュアル・エディタまたは「プロパティ」ウィンドウで行った変更は即時にソース・コードに反映されます。

Javaビジュアル・エディタのツールバーを使用すると、容易にコンポーネントを操作し、選択したコンポーネントについて表示されるポップアップ・メニューから選択できるコマンドを複製できます。

Javaビジュアル・エディタの使用の詳細は、第13章「Java Swingユーザー・インタフェースの実装」を参照してください。

8.3.13.1 コードの保護

JDeveloperには、変更中のコードに対する書込み保護機能があります。この書込み保護では、動作する必要のあるコードが保持されます。図8-9に示すSwing/AWTコードのセクションはグレーで表示されていて、このコード・セクションが保護されていることを示します。

図8-9 保護されているコード

この図は周囲のテキストで説明しています

8.4 ドキュメント・コメントの追加方法

JDeveloperの編集コマンドを使用して、図8-10に示すようなJavadocコメントを作成および保持することができます。Javadocコメントの入力後に、「ファイル内検索」ダイアログを使用してそれらのコメントを検索できます。

図8-10 Javadocコメント

この図は周囲のテキストで説明しています

ソース・ファイルにドキュメント・コメントを追加するには、次のようにします。

  • コメントを追加するクラス宣言、フィールドまたはメソッドのすぐ上にカーソルを置き、ドキュメント・コメントの開始(/**)を入力してから[Enter]を押します。または、

  • 「構造」ウィンドウでコード要素を選択した状態で、メイン・メニューから「ソース」を選択し、「Javadocコメントの追加」を選択します。

ドキュメント・コメント用のテンプレートがファイルに挿入されます。このテンプレートにコード要素の情報を追加してください。

8.4.1 ドキュメント・コメントの更新方法

Javaソース・エディタでは、ドキュメント・コメントを更新できます。ドキュメント・コメントに対するタグが追加または削除されて、要素に加えた変更が反映されます。新しいタグに関する説明を追加します。

ソース・ファイルのドキュメント・コメントを更新するには、次のようにします。

  1. 「構造」ウィンドウで、コメントを更新する要素の上にカーソルを置きます。

  2. 右クリックして、「Javadocコメントの追加」を選択します。

8.4.2 プロジェクトのJavadocプロパティの設定方法

作成するすべてのプロジェクトは、JDeveloperプロジェクトのデフォルト設定か、またはワークスペース共通ですべてのプロジェクトに対してユーザーが指定した設定になります。これらのデフォルト設定は、プロジェクトごとに置き換えることもできます。これらのプロパティの設定方法はどちらの場合でも同じであり、情報の場所および適用対象のみが異なります。

個々のプロジェクトのJavadocプロパティを設定するには、次のようにします。

  1. 「アプリケーション」ウィンドウで、プロジェクトを選択します。

  2. メイン・メニューから、「アプリケーション」「プロジェクト・プロパティ」を選択するか、右クリックして「プロジェクト・プロパティ」を選択します。

  3. 「Javadoc」を選択します。

  4. 属性を設定します。

  5. 完了後、「OK」をクリックして「プロジェクト・プロパティ」ダイアログを閉じます。

8.4.3 ドキュメント・コメントのタグのカスタマイズ方法

Javaコード・エディタでは、ドキュメント・コメント・タグの使用をカスタマイズできます。カスタム・タグを定義したり、ドキュメント・コメントの作成時にどのタグを自動的に含めるかを選択できます。ここで選択した内容は、すべてのプロジェクトに適用されます。

カスタム・タグを作成する場合、タグをコード要素に関連付けて、必須かどうかを定義し、デフォルト値を割り当てて、タグ・リストでの順序を指定できます。

カスタム・タグを定義するには、次のようにします。

  1. メイン・メニューから、「ツール」「プリファレンス」を選択します。

  2. 「プリファレンス」ダイアログで、「コード・エディタ」「Java」「Javadoc」ページを選択します。

  3. 「プラス」(+)アイコンをクリックします。

    デフォルト名newのタグがリストに追加されます。

  4. 「タグのプロパティ」ボックスで、タグの名前を変更し、その他のプロパティを設定します。

  5. 完了後、「OK」をクリックします。

8.4.4 クイックJavadocを使用してコード要素のJavadocを表示する方法

Javaソース・エディタでの作業中、クイックJavadoc機能を使用すると、コード要素(クラス、インタフェースまたは個々のメンバー)のJavadoc生成ドキュメントに簡単にアクセスできます。

図8-11に示すように、クイックJavadoc機能は、選択したエンティティをソースパスで参照し、入力されたJavadocコメントをポップアップ・ウィンドウに表示します。

図8-11 「クイックJavadoc」ウィンドウ

この図は周囲のテキストで説明しています

コード要素に対してJavadocコメントが存在しない場合には、空のJavadocコメントが表示されます。

クイックJavadoc機能は、選択したソース・コードが次の条件を満たしている場合に使用できます。次のとおりです。

  • このプロジェクトのソースパスに存在する。

  • 現在のプロジェクトが依存しているプロジェクトのソースパスに存在する。

  • このプロジェクトに割り当てられたライブラリに使用できる。

  • 使用中のJDKに組み込まれている。

コード要素のJavadocを表示するには、次のようにします。

  1. コード要素を選択します。

  2. メイン・メニューから、「ソース」「クイックJavadoc」を選択するか、エディタ内で右クリックして「クイックJavadoc」を選択します。

    その要素のドキュメントを表示するポップアップ・ウィンドウが開きます。そのウィンドウ以外の任意の場所をクリックしてウィンドウを閉じます。

8.4.5 ドキュメント・コメントのプレビュー方法

単一のソース要素のJavadocを表示するときと同じ方法で、ソース・ファイルのドキュメント・コメントをプレビューできます。

特定のクラス、メンバーまたはメソッド・コールのドキュメント・コメントを表示するには、次のようにします。

  1. コード要素の名前を選択します。

  2. 右クリックして「クイックJavadoc」を選択します。

    指定した要素のJavadocのみを含むポップアップ・ウィンドウが表示されます。ブラウザと同じように、このウィンドウから別のJavadocにリンクで移動できます。

8.4.6 ドキュメント・コメントの監査方法

ソース・ファイルに記載されているドキュメント・コメントを検証できます。監査を実施すると、書式設定エラー、欠落しているタグまたは余分なタグが報告されます。

ソース・ファイルのドキュメント・コメントをチェックするには、次のようにします。

  1. 「アプリケーション」ウィンドウで、チェックするファイルを選択します。

  2. メイン・メニューから「ビルド」「監査」ファイル名を選択します。

  3. 「コード監査」ダイアログで、「プロファイル」ドロップダウン・リストから「Javadocルール」を選択します。

  4. 検索または無視するエラーのタイプを選択できるようにコード監査を構成する場合には、「編集」をクリックします。

    「監査プロファイル」ダイアログが開き、「ルール」タブが選択されています。

  5. 「Java SE」「Java」「Javadocコメント」の各ノードを開いて、1つ以上のJavadocルールを選択します。項目を選択して、妥当性チェックの説明を表示します。項目ごとに、各ルールのプロパティ値を設定できます。

  6. 「監査プロファイル」ダイアログで、「OK」をクリックします。

  7. 「監査 - ファイル名ダイアログで、「実行」をクリックします。

    コード監査の結果は、ログ・ウィンドウに表示されます。

8.4.7 Javadocのビルド方法

「設定」ダイアログのJavadocページでプロジェクトに対して設定したプロパティに基づいて、APIリファレンスおよびその他のドキュメントを「アプリケーション」ウィンドウから直接生成できます。ドキュメントは、ファイルのコードおよびドキュメント・コメントからjavadocユーティリティを使用して生成されます。

パッケージ、ファイルまたはプロジェクトに対してJavadocをビルドする手順は次のとおりです。

  1. 「アプリケーション」ウィンドウで適切なノードを選択します。

  2. メイン・メニューから「ビルド」「Javadoc」を選択します。

    Javadocがバックグラウンドで生成されます。「ログ」ウィンドウに、情報および結果が表示されます。「ログ」ウィンドウのリンクを使用して、index.htmlファイルをプロジェクトに追加できます。

8.4.8 欠落している注釈要素に対する参照の作成方法

Javaソース・コード・エディタで未解決のJava注釈に対する監査のヒントを表示する際に、欠落している注釈要素の参照を登録できます。

欠落している注釈の参照を作成する手順は次のとおりです。

  1. Javaソース・コード・エディタでJavaクラスを開きます。

    詳細は、第3.8項「ソース・ファイルの使用方法」を参照してください。

  2. Javaクラスのソース・コードに注釈(例: @stateless)を入力します。

  3. 注釈の上にカーソルを重ねます。

    タイプ(例: @stateless)が見つからないというダイアログが表示されます。

  4. 「詳細」リンクをクリックします。

  5. 「注釈タイプ <type>の作成」リンクをクリックします。

  6. 「注釈タイプの作成」ダイアログで、注釈クラス(例: project1)を特定するパッケージの名前を入力します。

  7. 「OK」をクリックします。

8.4.9 JOT構造ウィンドウの使用

Javaオブジェクト・ツリー(JOT)構造ウィンドウには、Javaソース・エディタで選択したソース要素の階層ツリーが表示されます。たとえば、例8-2と同様のコードがJavaファイルに含まれていることがあります。

例8-2 Javaソース・コード

public class Class1 implements Serializable{ 
    @SuppressWarnings("serial:-4347721670334465144") 
        // test 
    private static final long serialVersionUID = -4347721670334465104; 
    public Class2() { 
        super(); 
    } 
    /* Non-javadoc comment */ 
     
    public void a(){} 
    // @SuppressWarnings("serial:23") 
    private class foo{} 
} 

これに基づき、図8-12に示すように、JDeveloperの下部にJOT構造ウィンドウが表示されます。階層には、コードの子ソース要素および親ソース要素がすべて含まれます。クラス、コード・ブロック、またはその他の要素などです。

図8-12 JOT構造ウィンドウ

この図は周囲のテキストで説明しています

Javaソース・エディタでSourceElementを選択すると、対応するSourceElementが、対応するテキストとともにJOT構造ウィンドウで強調表示されます。

Javaオブジェクト・ツリー構造はJDeveloperの拡張機能であり、この機能にアクセスするにはインストールしておく必要があります。「ヘルプ」「更新のチェック」に移動して、この拡張機能をインストールします。

インストール後、「ウィンドウ」JOT構造ペインを選択すると、JOT構造ウィンドウが表示されます。

8.4.9.1 JOT構造ウィンドウでコメントおよび空白行を表示する方法

Java構造ウィンドウでは、Javaコード内のJavaコメントと非Javaコメント、および空白行を表示できます。たとえば、コメントおよび空白行を表示を選択して、Javaコード内の空白行にカーソルを合わせると、その空白行が対応するテキスト(例: SourceLexicalBlankline (SRC_LEX_BLANKLINE))とともにツリーに表示されます。

コメントおよび空白行を表示する手順は次のとおりです。

  1. メイン・メニューで、「表示」JOT構造ウィンドウを選択します。

  2. コメントおよび空白行を表示を選択します。

8.4.9.2 JOT構造ウィンドウで「リフレッシュ・モード」を設定する方法

「カーソル更新時にリフレッシュ」チェック・ボックスを使用して、階層ツリーのリフレッシュをオンまたはオフにすることができます。

たとえば、このチェック・ボリュームを選択した状態で、Javaソース・ファイル内のテキストにカーソルを合わせるとします。そのテキストのSourceElementとその親がJOTツリーに表示されます。JOT構造ウィンドウの状態を固定して、このSourceElementを使用するコードを開発するには、「カーソル更新時にリフレッシュ」チェック・ボックスの選択を解除します。変更するJavaソース・ファイルをロードします。作業中に、JOTツリーの固定した状態を参照できます。

リフレッシュ・モードを設定する手順は次のとおりです。

  1. メイン・メニューで、「ウィンドウ」JOT構造ウィンドウを選択します。

  2. カーソル更新時にリフレッシュを選択します。

8.5 Javaプロジェクトのリファクタ

リファクタとは、プログラムの動作を変更することなくコード構造を変更する編集上の技術です。リファクタ操作は一連の簡単な編集で、プログラムのコードを最終的に動作変更を伴わずに変換します。各リファクタ操作の後、プログラムは正常にコンパイルおよび実行されます。JDeveloperには、自動リファクタ操作のコレクションが用意されています。

リファクタは、プログラムのソース・コードを変更して保持、拡張または再利用しやすくする際に使用します。この変更は一連のリファクタ・ステップとして行われます。ユーザーは、ステップの終了ごとに、プログラムを再ビルドおよび再検証して、エラーが発生していないか確認できます。

表8-1に、簡単なリファクタ操作の例をいくつか示します。

表8-1 リファクタ操作

操作 説明

メソッドの名前の変更

この操作では、ターゲット・メソッドの使用方法を検索してから、名前の各オカレンスを置き換えるかどうかを選択できます。

クラスの複製

クラスの定義が複製され、複製された定義に含まれるクラス名のオカレンスがすべて新しい名前で置き換えられます。

メソッドへのパラメータの導入。

メソッド定義がパラメータの追加によって変更され、各メソッド・コールが変更されて、該当するタイプおよび値の引数が提供されます。

スキーマのターゲット・ネームスペースの変更。

参照するスキーマはすべて更新され、新しいターゲット・ネームスペースが割り当てられます。


また、JDeveloperには、次のようなさらに高度なリファクタ操作も用意されています。

  • 選択クラス・メンバーからメンバー宣言を導出することによって、クラスからインタフェースを抽出します。

  • メンバー定義をクラス間で移動することによって、クラス・メンバーをスーパークラスにプル・アップまたはサブクラスにプッシュ・ダウンします。

  • クラスを抽出し、一連のフィールドまたはメソッドを新しいコンテナ・オブジェクトで置き換えます。

  • 選択式で構成された新規要素への参照で選択した式を置き換えることによってフィールド、変数、パラメータまたは定数を導入します。

  • 文で構成された新規メソッドへのコールで、強調表示された連続する文を置き換えることによって、メソッドを抽出します。

  • メソッド・オブジェクトを抽出して既存のコード・ブロックから新規のメソッドを作成し(「メソッドの抽出」と類似)、ただしそれを新規作成した内部クラス内に移動して、すべてのローカル変数をクラスのフィールドに変換します。

  • パラメータ・オブジェクトを導入し、一連のフィールドまたはメソッドを新しいコンテナ・オブジェクトで置き換えます。

リファクタ操作の結果が目的と異なる場合は、編集操作で行うように、[Ctrl]キーを押してから[Z]キーを押してリファクタ操作を元に戻すことができます。

8.5.1 Javaクラス図でのリファクタ

ダイアグラムでインプレース編集機能を使用してクラスの名前を変更またはクラスを移動すると、そのクラスのソース・コードが自動的にリファクタされます。ダイアグラムでJavaパッケージの名前を変更またはパッケージを移動すると、そのパッケージの内容が自動的にリファクタされます。

ダイアグラムでフィールド、メソッドまたは内部クラスを削除すると、自動的に「安全に削除」リファクタ・パターンが適用されます。詳細は、第8.5.5項「コード要素の削除方法」を参照してください。

ダイアグラムのJavaクラス、インタフェース、列挙またはメンバーにリファクタ・パターンを適用するには、ダイアグラムで対象となるクラスまたはメンバーを選択し、「リファクタ」メニューから目的のリファクタ・パターンを選択します。このようにしてリファクタ・パターンを適用した場合、リファクタの結果をプレビューする機能を含む適切なダイアログが表示されます。詳細は、第8.5.6項「クラスおよびインタフェースのリファクタ」を参照してください。

Javaクラス図のJavaクラス、インタフェースおよび列挙では、次のリファクタ・パターンを使用できます。

  • 名前の変更

  • 移動(ダイアグラムで1つ選択した場合にも複数選択した場合にも適用されます)

  • 複製

  • インタフェースの抽出

  • スーパークラスの抽出

Javaクラス図のJavaフィールドおよびメソッドでは、次のリファクタ・パターンを使用できます。

  • 名前の変更

  • 移動

  • staticにする

  • メンバーのプル・アップ

  • メンバーのプッシュ・ダウン

  • メソッドの変更(Javaメソッドのみ)

8.5.2 リファクタ操作の開始方法

JDeveloperでは、コードの質を向上できる自動リファクタ操作を幅広く提供しています。コードの外部動作は変わりませんが、内部構造が改善されます。

リファクタ操作を開始するには、次のようにします。

  1. ソース・エディタ・ウィンドウ、「アプリケーション」ウィンドウまたは構造ペインでプログラム要素を選択します。

  2. プログラム要素を右クリックして、「リファクタ」を選択します。

  3. ポップアップ・メニューから操作、たとえば「名前の変更」「移動」、または「削除」を選択します。

ツールバーから「リファクタ」を選択し、ドロップダウン・リストからリファクタ操作を選択することもできます。

図8-13に示すように、リファクタのコンテキスト・メニューでは、JDeveloperのどこを右クリックしてメニューを表示しているかによって、表示される項目が異なります。

図8-13 ドロップダウン・リストのリファクタ

この図は周囲のテキストで説明しています

たとえば、次のものを右クリックしたときに異なるリファクタ操作が表示される異なるポップアップ・メニューを表示できます。

  • 構造メニュー

  • メソッドの行頭

  • IDEにおけるメソッドの戻り型

  • IDEにおけるメソッドの名前

  • IDEにおけるメソッドのパラメータ・リストのパラメータ

リファクタ操作の結果が目的と異なる場合は、編集操作で行うように、[Ctrl]を押しながら[Z]キーを押してリファクタ操作を元に戻すことができます。

8.5.3 リファクタ操作のプレビュー方法

多くの使用方法を変更する可能性があるリファクタ操作を実行する場合、手動での変更が必要な使用方法や除外が必要な使用方法を識別する場合には、使用方法のプレビューが役に立ちます。選択したリファクタ操作に応じて、「リファクタ」ダイアログの「プレビュー」ボタンをクリックすると、生じる変更のプレビューを表示できます。「プレビュー」をクリックすると、ソース・エディタの下にログ・ウィンドウが表示されます。「プレビュー」ログ・ウィンドウに表示される使用方法を確認して、それらの使用方法をインスペクトして解決し、必要に応じて操作をコミットすることができます。

ログには、閉じることが可能なパッケージとJavaファイルのツリーが表示されます。各ファイルの下には、使用方法を含むコード行が表示されます。

  • 「編集」ウィンドウに使用方法を表示するには、ログのエントリをダブルクリックします。

  • リファクタ操作から使用方法を除外するには、使用方法を右クリックして「対象外」を選択します。

リファクタ操作をコミットするには、次のようにします。

  1. 使用方法に影響する編集を行った場合は、ログ・ツールバーの「リフレッシュ」アイコンをクリックし、使用方法の検索を再実行します。

  2. 「プレビュー」ログ・ウィンドウで「リファクタ」ボタンをクリックします。

8.5.4 コード要素の名前の変更方法

Javaアプリケーションを開発する際に、パッケージ、クラス、インタフェース、メソッド、フィールド、パラメータまたは変数へのすべての参照および定義の名前を簡単に変更できます。必要に応じて、最初にプレビュー(置換する使用方法のリスト)を生成できます。使用方法をツリー形式で表示するには、「使用方法の表示」ボタンを使用します。

名前の変更操作の有効範囲は、プロジェクト内の要素の全範囲になります。プロジェクト、クラス、インタフェースおよびメンバーの各使用方法は、プロジェクト内で表示されるすべての場所で置換されます。パラメータおよび変数の名前は、定義の字句範囲でのみ変更されます。同じ名前を持つその他の要素は変更されません。

デフォルトでは、操作は、コメント(ただし、コード要素を指定するドキュメント・コメント・タグではない)および注釈を除いた、.javaファイルに制限されます。あいまいではない使用方法が置換されます。クラスとインタフェースの使用方法の名前は、完全修飾されている場合、またはimport文で指定されている場合に置換されます。

パッケージ、型およびメンバー要素の場合、操作はコメントまたはその他のファイルにまで拡張できます。操作をコメントにまで拡張する場合は、行コメント、コメント・アウトされたコード、ドキュメント・コメントの本体および注釈で置換が行われます。操作をその他のファイルにまで拡張する場合、「プリファレンス」ダイアログの「ファイル・タイプ」ページでテキスト・ファイルとして指定されているタイプのプロジェクト・ファイルでもテキスト置換が行われます。コメントおよびその他のファイルでの置換は、Javaコードでの置換よりもアグレッシブに行われます。

コード要素の名前を変更するには、次のようにします。

  1. 次の2つの方法のいずれかで、名前を変更する要素を選択します。

    • Javaソース・エディタで、要素名を選択します。

    • 「アプリケーション」ウィンドウまたは「構造」ウィンドウなどのウィンドウで、要素名を選択します。

  2. 次の2つの方法のいずれかで、コマンドを起動します。

    • メイン・メニューまたはポップアップ・メニューから「リファクタ」「名前の変更」を選択します。

    • [Ctrl]キーと[Alt]キーを押しながら[R]キーを押します。

      「名前の変更」ダイアログが開きます。

  3. 「変更後の名前」ボックスに、新しい名前を入力します。名前は有効で、まだ使用されていない必要があります。

  4. テキスト置換の深さを設定します。

    • 「テキスト使用方法のJavadocの検索」を選択して、操作をコメント、ドキュメント・コメントの本体および注釈にまで拡張します。

    • (パッケージ、タイプおよびメンバー要素のみ)操作対象をプロジェクト内にある他のタイプのテキスト・ファイルにまで拡張する場合は、「テキスト・ファイルの検索」を選択します。

  5. 名前の変更操作をコミットする前に置換される使用方法をインスペクトする場合は、「プレビュー」を選択します。

  6. 「OK」をクリックします。

    「プレビュー」を選択して、変更中の使用方法をすべて回避する場合は、「プレビュー」ログ・ウィンドウからの名前変更操作を完了してください。

8.5.5 コード要素の削除方法

Javaアプリケーションを開発する際に、クラス、インタフェース、メソッドまたはフィールドの定義を安全に削除できます。要素が使用中の場合は、ユーザーの確認なしに定義の削除が実行されることはありません。

要素が使用中である場合は、使用方法を示すログが表示されます。このリストを使用して、使用方法をインスペクトおよび解決します。このため、削除を確認しても、残りの使用方法は未定義の参照としてコード内に残ります。

コード要素を削除するには、次のようにします。

  1. 次のいずれかの方法で、削除する要素を選択します。

    • Javaソース・エディタで、名前を選択します。

    • 「アプリケーション」ウィンドウまたは「構造」ウィンドウなどのウィンドウで、名前を選択します。

  2. 次のいずれかの方法でコマンドを起動します。

    • メイン・メニューまたはポップアップ・メニューから「リファクタ」「削除」を選択します。

    • [Alt]キーを押しながら[Delete]キーを押します。

      使用方法についてプロジェクト・ファイルが検索されます。検出された使用方法の数が「削除の確認」ダイアログに表示されます。

  3. 「使用方法の表示」ボタンをクリックして、ログ・ウィンドウ内で使用方法をインスペクトおよび解決します。

  4. 「プレビュー」を選択して、ログ・ウィンドウ内で削除されたファイルの使用方法をインスペクトします。

  5. 「OK」をクリックします。

8.5.6 クラスおよびインタフェースのリファクタ

Javaアプリケーションを開発する際に、新規クラスとインタフェースの定義、および既存のクラスの再利用が簡単に実行できます。たとえば、パッケージ、クラスまたはインタフェースを別のパッケージに移動することができます。オプションで、最初にプレビュー(置換する使用方法のリスト)を生成できます。プレビューを使用して、移動を完了する前に、選択した使用方法を調査、変更するかまたは除外します。

タイプを移動する場合、プライマリ・クラスおよびプライマリ・インタフェース(ファイルと同じ名前を持つもの)のみが移動対象として選択できます。実際には、ファイルの名前が変更され、セカンダリ・クラスおよびセカンダリ・インタフェースの定義はプライマリとともに残ります。アクセス・レベルは保持されます。元のパッケージの他のクラスが移動対象のクラスを参照している場合、移動対象のクラスにはpublicアクセス権が付与されます。移動対象のクラスが元のパッケージの他のクラスを参照している場合は、元のパッケージの他のクラスがpublicになります。

クラスまたはインタフェースを移動する操作の範囲は、プロジェクト全体です。

デフォルトでは、操作は、コメント(ただし、コード要素を指定するドキュメント・コメント・タグではない)および注釈を除いた、.javaファイルに制限されます。あいまいではない使用方法が置換されます。完全修飾されている場合、またはimport文に指定されている場合は、使用方法が置換されます。

操作をコメントまたはその他のファイルにまで拡張することを選択できます。操作をコメントにまで拡張する場合は、行コメント、コメント・アウトされたコード、ドキュメント・コメントの本体、および注釈に含まれるテキストが置換されます。操作をその他のファイルにまで拡張する場合は、「設定」ダイアログの「ファイル・タイプ」ページでテキスト・ファイルとして指定されるタイプのプロジェクト・ファイルに対しても置換が行われます。コメントおよびその他のファイルでの置換は、Javaコードでの置換よりもアグレッシブに行われます。

クラスまたはインタフェースを移動するには、次のようにします。

  1. 次のいずれかの方法で、移動するパッケージ、クラスまたはインタフェースを選択します。

    • Javaソース・エディタで、名前を選択します。

    • 「アプリケーション」ウィンドウまたは「構造」ウィンドウで、名前を選択します。

  2. 次のいずれかの方法でコマンドを起動します。

    • メイン・メニューまたはポップアップ・メニューから「リファクタ」「移動」を選択します。

    • [Ctrl]キーと[Alt]キーを押しながら[M]キーを押します。

      「移動」ダイアログが開きます。

  3. 「移動先」フィールドに、新しいパッケージ名を入力します。

    また、フィールドの横の「検索」アイコンをクリックして、既存のパッケージに移動することもできます。

  4. テキスト置換の深さを設定します。

    • 「参照の更新」: ドロップダウン・リストで、参照が更新される場所を選択します。

    • 「テキスト使用方法のJavadocの検索」: 操作を、ドキュメントの本体にまで拡張します。

    • 「テキスト・ファイルの検索」: 操作をプロジェクト内にある他のタイプのテキスト・ファイルにまで拡張します。

  5. 移動操作をコミットする前に置換される使用方法をインスペクトする場合は、「プレビュー」を選択します。

    「使用方法の表示」をクリックして、「移動」ダイアログ内の表示パネルを開き、プロジェクトの現在の使用方法の一覧を表示することもできます。

  6. 「OK」をクリックします。

    「プレビュー」を選択して、変更中の使用方法をすべて回避する場合は、「プレビュー」ログ・ウィンドウからの名前変更操作を完了してください。詳細は、第8.5.4項「コード要素の名前の変更方法」を参照してください。

クラスは、「アプリケーション」ウィンドウで複数のクラスを1つのパッケージから別のパッケージにドラッグして移動することもできます。

8.5.7 クラスまたはインタフェースの複製方法

Javaアプリケーションを開発する際に、クラスまたはインタフェースを簡単に複製できます。

プライマリ・クラスおよびプライマリ・インタフェース(ファイルと同じ名前を持つもの)のみが複製対象として選択できます。複製されたクラスまたはインタフェースは、同じパッケージにオリジナルとして追加されます。

新しいクラスのメンバー名には、オリジナルでのメンバー名と同じ名前が付けられます。ただし、オリジナル・クラスやオリジナル・インタフェースの名前から導出されたメンバー名は除きます。オリジナル名がメンバー名に埋め込まれている場合は、新しい名前に置換されます。

クラスまたはインタフェースを複製するには、次のようにします。

  1. Javaソース・エディタで、複製するクラスまたはインタフェースの名前を選択します。


    注意:

    プライマリ・クラスおよびプライマリ・インタフェース(ファイルと同じ名前を持つもの)のみが移動対象として選択できます。

  2. メイン・メニューから「リファクタ」「複製」を選択します。

    「タイプの複製」ダイアログが開きます。

  3. 「クラス名」ボックスで、新しい名前を入力します。

    また、クラス(例: client.frame1)を使用して新しいパッケージを指定することもできます。

  4. 「OK」をクリックします。

    新規クラスがプロジェクトに追加されます。

8.5.8 クラスからインタフェースを抽出する方法

Javaアプリケーションを開発する際に、既存のクラスに定義されている選択したメソッドおよびstaticフィールドから新しいインタフェースを簡単に導出できます。

オプションとして、パラメータ、変数およびメンバーのタイプ仕様などの宣言を、宣言に含まれるタイプ名を新規インタフェース名で置き換えることによって、宣言を汎化することもできます。ただし、すべての宣言を置換できるわけではありません。たとえば、メソッドの起動に使用される変数の宣言は、このメソッドが新規インタフェースに抽出されていない場合は、置換できません。置換はプロジェクト内のすべての場所で行われます。

クラスの宣言が変更され、新しいインタフェースが実装されたことが示されます。

インタフェースを抽出するには、次のようにします。

  1. 次のいずれかの方法で、インタフェースを導出するクラスを選択します。

    • Javaソース・エディタで、クラス名を選択します。

    • 「アプリケーション」ウィンドウまたは「構造」ウィンドウで、クラス名を選択します。

  2. メイン・メニューから、「リファクタ」「インタフェースの抽出」を選択します。

    「インタフェースの抽出」ダイアログが開きます。

  3. 「パッケージ」フィールドで、新しいインタフェースのパッケージの名前を入力します。

  4. 「インタフェース」フィールドで、新しいインタフェースの名前を入力します。

  5. 「抽出するメンバー」表で、新しいインタフェースに含めるメンバーを選択します。

  6. クラスを指定する既存の宣言を、インタフェースを指定する宣言に変換する場合は、「使用方法の置換」を選択します。

  7. 抽出操作をコミットする前にクラスの使用方法をインスペクトする場合は、「プレビュー」を選択します。

  8. 「OK」をクリックします。

8.5.9 スーパークラスの抽出方法

スーパークラスを抽出すると、コードの作成後であっても追加レベルを階層に追加することができます。スーパークラスは、選択したクラスの選別メンバーに基づいて作成できます。スーパークラスは、選別メンバーに一致するフィールド宣言とメソッド宣言で構成されます。

スーパークラスを抽出するには、次のようにします。

  1. 「アプリケーション」ウィンドウ、「構造」ウィンドウまたはJavaソース・エディタのウィンドウで、クラス名を選択します。

  2. メイン・メニューから、「リファクタ」「スーパークラスの抽出」を選択します。

    「スーパークラスの抽出」ダイアログが開きます。

  3. 「パッケージ」フィールドで、新しいスーパークラスが属するパッケージの名前を入力します。

  4. 「クラス名」フィールドで、新しいスーパークラスの名前を入力します。

  5. 「抽出するメンバー」表で、新しいスーパークラスに含めるメンバーを選択します。

    メソッドをスーパークラスのabstractメソッドとして作成する場合は、そのメソッドの「抽象」ボックスを選択します。スーパークラスにメソッドの依存性を含める場合は、「依存性」ボックスを選択します。

  6. クラスを指定する既存の宣言を、スーパークラスを指定する宣言に変換する場合は、「使用方法の置換」を選択します。

  7. 置換をコミットする前に、「プレビュー」を選択して使用方法のリストを表示します。このオプションは、「使用方法の置換」を選択した場合にのみ有効になります。

  8. 「OK」をクリックします。

8.5.10 可能な場合のスーパータイプの使用方法

Javaアプリケーションを開発する際に、選択したクラスの参照をスーパータイプの1つへの参照で置き換えることによって、パラメータ、変数およびメンバーのタイプ仕様などの宣言を簡単に汎化できます。ただし、すべての宣言を置換できるわけではありません。たとえば、メソッドの起動に使用される変数の宣言に対する置換は、このメソッドもスーパータイプに定義されていない場合は行われません。置換はプロジェクト内のすべての場所で行われます。

宣言を汎化するには:

  1. 次のいずれかの方法で、宣言を汎化するクラスまたはインタフェースを選択します。

    • Javaソース・エディタで、名前を選択します。

    • 「アプリケーション」ウィンドウまたは「構造」ウィンドウで、名前を選択します。

  2. メイン・メニューから「リファクタ」「スーパータイプを可能であれば使用」を選択します。

    「スーパータイプの使用」ダイアログが表示されます。

  3. 「スーパータイプ」表で、宣言を汎化するスーパータイプを選択します。

  4. 「OK」をクリックします。

8.5.11 匿名クラスの内部クラスへの変換方法

メソッドの本体内でインナー・クラスを宣言できます。また、メソッドの本体内で、名前を付けずにインナー・クラスを宣言することもできます。これを匿名内部クラスといいます。JDeveloperでは、無名のインナー・クラス(匿名クラス)を名前付きインナー・クラスに変換できます。

匿名クラスを内部クラスに変換するには、次のようにします。

  1. Javaソース・エディタ・ウィンドウで、匿名クラスの宣言を選択します。

  2. メイン・メニューから、「リファクタ」「無名を内部クラスに変換」を選択します。

    「無名クラスを内部クラスに変換」ダイアログが開きます。

  3. 「クラス名」ボックスで、内部クラスの名前を入力します。

  4. 内部クラスにstatic修飾子を指定する場合は、「static」ボックスを選択します。

  5. 匿名クラスを内部クラスに変換するには、「OK」をクリックします。

8.5.12 内部クラスの移動方法

最上位レベルに新しく作成したクラスに内部クラスを移動できます。クラスが不適切なパッケージにあるため、より適合する別のパッケージに移動する必要がある場合などにこの操作が使用できます。

内部クラスを移動するには、次のようにします。

  1. 「構造」ウィンドウまたはJavaソース・エディタのウィンドウで、インナー・クラス名を選択します。

  2. メイン・メニューから、「リファクタ」「移動」を選択します。

    「内部クラスの移動」ダイアログが開きます。

  3. 新しい最上位レベルのクラスを作成する際に、ダイアログに表示された名前を使用しない場合は、この名前を上書きするか、新しい名前を選択します。

  4. ダイアログに表示された詳細内容を使用して新しい最上位レベルのクラスを作成する場合は、「OK」をクリックします。

8.5.13 クラス・メンバーのリファクタ

Javaアプリケーションを開発する際に、メンバー定義をクラス間で簡単に移動できます。たとえば、クラス・メンバー(メソッドなど)を別のクラスに移動できます。

8.5.13.1 Staticメソッドの移動

staticキーワードを使用して修飾子として宣言されたメソッドをstaticメソッドまたはstaticクラス・メンバーといいます。

staticメソッドでは、それが定義されているクラスのインスタンス変数は使用されません。mainメソッドのメソッド・シグネチャはstaticであり、mainメソッドを呼び出すためにクラスのインスタンスを作成する必要がないことを示しています。メソッドをstaticに定義した場合、インスタンス変数にアクセスしようとすると、コンパイラがエラー・メッセージを表示します。

staticメソッドを移動するには、次の手順を実行します。

  1. 「構造」ウィンドウまたはJavaソース・エディタ・ウィンドウで、メソッド名を選択します。

  2. メイン・メニューから、「リファクタ」「移動」を選択します。

    「メンバーの移動」ダイアログが開きます。

  3. 「ターゲット」パネルで、メンバーの移動先のクラスを入力または選択します。

  4. 移動するメンバーごとに、「抽出するメンバー」リストのメンバーの左側にあるチェック・ボックスが選択されていることを確認します。

  5. メンバーの依存性も移動する場合、「依存性」列で対応するチェック・ボックスを選択します。

8.5.13.2 Staticではないメソッドの移動

staticではないメソッドを静的なコンテキストから参照することはできません。staticではないメソッドをstaticメソッドから呼び出すには、staticではないメソッドが含まれているクラスのインスタンスを割り当てる方法しかありません。staticではないメソッドは、クラス内のインスタンス・レベルのデータ(例: staticではないフィールド)にアクセスする必要があります。

staticではないメソッドを移動するには、次の手順を実行します。

  1. 「構造」ウィンドウまたはJavaソース・エディタ・ウィンドウで、メソッド名を選択します。

  2. メイン・メニューから、「リファクタ」「移動」を選択します。

    メンバーの移動先に適したターゲットが少なくとも1つ存在する場合は、「メンバーの移動」ダイアログが開きます。そうでない場合は、メッセージ・ボックスが表示されます。

  3. 「ターゲット」パネルで、メンバーの移動先のクラスを選択します。

  4. 新しい場所でメソッドおよびパラメータに新しい名前を使用する場合、「メソッド名」および「パラメータ名」ボックスに新しい名前を入力します。

  5. 移動後にメンバーの使用方法を処理する方法を選択します。

    • 新規作成された代行メソッドを通じて使用方法を処理する場合は、「代行の使用」を選択します。

    • すべての使用方法を、移動後のクラス・メンバーを直接呼び出す使用方法に置き換える場合には、「置換」を選択します。

8.5.14 メソッドをstaticメソッドに変更する方法

メソッドにstatic修飾子を割り当てることができます。要素をstaticにする際に、staticではないコンテキストでの使用方法が見つかった場合のアクションを指定することもできます。

メソッドをstaticメソッドに変更するには、次のようにします。

  1. 「構造」ウィンドウまたはJavaソース・エディタで、メソッド名を選択します。

  2. メイン・メニューから、「リファクタ」「staticにする」を選択します。

    クラスがクラス階層の一部である場合、「staticにする」ダイアログが開きます。そうでない場合は、ただちにstatic修飾子が追加されます。

  3. 「staticにする」ダイアログが開いた場合は、次の操作を行います。

    • 「名前」ボックスで、変更済メソッド内で参照として使用する名前を入力または選択します。

      表示されるオプションはローカル・オブジェクト名から導出されます。

    • オーバーライドできないメソッドを作成する場合は、「finalを宣言」ボックスを選択します。

8.5.15 メソッドのシグネチャを変更する方法

メソッドのシグネチャを変更できます。メソッドのシグネチャは、メソッドの名前とパラメータの番号およびタイプ(およびそれらの順序)の組合せです。

メソッドのシグネチャを変更するには、次のようにします。

  1. 「構造」ウィンドウまたはJavaソース・エディタで、メソッド名を選択します。

  2. メイン・メニューから、「リファクタ」「メソッドの変更」を選択します。

    「メソッドの変更」ダイアログが開きます。

  3. 必要に応じて、メソッドの名前、戻り型、アクセス・レベルおよびパラメータを変更します。

    メソッドの名前をすでにクラスに存在する名前に変更する場合は、次に2番目のダイアログが表示されます。このダイアログを使用して、変更するメソッドのすべての使用方法を既存のメソッドの使用方法に置換できます。

  4. 変更内容に基づいてタスクを作成し、「タスク」ウィンドウに追加する場合、「タスクをタスク・ウィンドウに追加」ボックスを選択します。


注意:

この機能はコンストラクタには適用されません。

8.5.16 メンバーをスーパークラスへプル・アップする方法

Javaアプリケーションを開発する際に、メンバーの定義をクラス(ソース・クラス)からそのスーパークラスの1つ(ターゲット・クラス)に簡単に移動できます。プロジェクト内にこのクラスの潜在的なターゲット・クラスが1つ以上存在する場合にのみ、この操作をクラスに適用できます。メンバーをライブラリ・クラスにプル・アップすることはできません。同様に、このリファクタ・コマンドは、スーパークラス句または実装されているインタフェースの一覧で宣言されているクラスにのみ適用されます。

デフォルトでは、メソッドをプル・アップすると、その定義はソース・クラスからターゲット・クラスに移動されます。メソッドを抽象化するように選択することもできます。この場合、メソッド定義はソース・クラスに残り、メソッドの宣言がターゲット・クラスに追加されます。メソッドを抽象化すると、ターゲット・クラスが未変換の場合は、ターゲット・クラスが抽象クラスに変換されます。

プル・アップ対象のメンバーには依存性がある場合があります。依存性がプル・アップ対象のメンバーの定義で使用されている場合、メンバーに依存性があります。依存性をプル・アップしないでメンバーをプル・アップすると、ターゲット・クラスに未定義の参照が発生します。プル・アップするメンバーを選択すると、そのメンバーの依存性が示されます。この場合、依存性もプル・アップするかどうかを選択できます。

privateとして宣言されたメンバーをプル・アップする場合、アクセスはprotectedに変更されます。

メンバーをプル・アップするには、次のようにします。

  1. 次のいずれかの方法で、メンバーのプル・アップ元にするクラスを選択します。

    • Javaソース・エディタで、名前を選択します。

    • 「アプリケーション」ウィンドウまたは「構造」ウィンドウで、名前を選択します。

  2. メイン・メニューから「リファクタ」「メンバーのプル・アップ」を選択します。

    「メンバーのプル・アップ」ダイアログが開きます。

  3. 「ターゲット」ドロップダウン・メニューからターゲット・クラスとなるスーパークラスを選択します。

  4. 「抽出するメンバー」表で、プル・アップするメンバーを選択します。

    存在する場合、選択したメンバーに依存性があるメンバーが示されます。

  5. メソッドをターゲット・クラスに抽象化する場合、「抽象」列のチェック・ボックスを選択します。


    注意:

    抽象化されるメンバーには依存性はありません。

  6. メンバーのすべての依存性もプル・アップする場合は、「依存性」列のチェック・ボックスを選択します。

    この選択によって依存オブジェクトが生成されます。すなわち、依存性の依存性もプル・アップされます。

  7. 「OK」をクリックします。

8.5.17 メンバーをサブクラスへプッシュ・ダウンする方法

Javaアプリケーションを開発する際に、メンバーの定義をクラス(ソース・クラス)から直下のサブクラス(ターゲット・クラス)に簡単に移動できます。

デフォルトでは、メソッドをプッシュ・ダウンすると、メソッドの定義はソース・クラスからターゲット・クラスに移動します。メソッドの宣言をソース・クラスに残し、ソース・クラスが未変換の場合は、ソース・クラスを抽象クラスに変換するように選択することもできます。

プッシュ・ダウン対象のメンバーには依存性がある場合があります。メンバーがプッシュ・ダウン対象のメンバーの定義を使用している場合、このメンバーには依存性があります。依存性をプッシュ・ダウンしないでメンバーをプッシュ・ダウンすると、ソース・クラスに未定義の参照が発生します。プッシュ・ダウンするメンバーを選択すると、その依存性が示されます。この場合、依存性もプッシュ・ダウンするかどうかを選択できます。

メンバーをプッシュ・ダウンするには、次のようにします。

  1. 次のいずれかの方法で、メンバーのプル・アップ元にするクラスを選択します。

    • Javaソース・エディタで、名前を選択します。

    • 「アプリケーション」ウィンドウまたは「構造」ウィンドウで、名前を選択します。

  2. メイン・メニューから「リファクタ」「メンバーのプッシュ・ダウン」を選択します。

    「メンバーのプッシュ・ダウン」ダイアログが開きます。

  3. 「抽出するメンバー」表で、プッシュ・ダウンするメンバーを選択します。

    存在する場合、選択したメンバーに依存性があるメンバーが示されます。

  4. メンバーの抽象定義をソース・クラスに残す場合は、「抽象」列のチェック・ボックスを選択します。

  5. 「依存性」列で、メンバーのすべての依存性をそのメンバーとともにプッシュ・ダウンするためのチェック・ボックスを選択します。

  6. 「OK」をクリックします。

8.5.18 フィールドの導入方法

Javaアプリケーションを開発する際に、式を名前付き要素に簡単に変換できます。たとえば、式をフィールドの参照に変換できます。新しいフィールド宣言がクラスに追加され、選択した式によって初期化されます。元の式は、新しいフィールドの参照と置き換えられます。

式のタイプがvoidである場合、式をフィールドに変換することはできません。

フィールドを導入するには、次のようにします。

  1. ソース・エディタで、式を選択します。

  2. メイン・メニューから「リファクタ」「フィールドの導入」を選択します。

    「フィールドの導入」ダイアログが開きます。

  3. 「タイプ」ドロップダウン・メニューからフィールドのタイプを選択します。

    メニューには、この式に一致するタイプがすべて表示されます。このオプションは、有効なタイプが1つのみの場合に表示されます。

  4. 「名前」テキスト・ボックスに名前が表示されます。

    表示された名前を変更または置換したり、ドロップダウン・メニューから別の名前を選択できます。

  5. 初期化方法を選択します:

    • 「現在のメソッド」を選択し、式を含む文の直前にフィールドの代入文を配置します。

    • 「フィールド宣言」を選択し、宣言文でフィールドに値を割り当てます。式にローカル・スコープの変数またはパラメータがある場合、このオプションは無効になります。

    • 「コンストラクタ」を選択し、クラスのコンストラクタ・メソッドでフィールドに値を割り当てます。式にローカル・スコープの変数またはパラメータがある場合、このオプションは無効になります。

  6. 「OK」をクリックします。

8.5.19 メソッド・コールをインライン化する方法

メソッド本体をコール元の本体に取り込み、元のメソッドを削除できます。これは、メソッド・コールのインライン化と呼ばれます。

メソッド・コールをインライン化するには、次のようにします。

  1. Javaソース・エディタで、インライン化するメソッド・コールのインスタンスを選択します。

  2. メイン・メニューから「リファクタ」「インライン」を選択します。

    • このクラスのメソッドに対するコールが1つのみである場合は、ただちに変更が行われます。

    • このクラスのメソッドに対するコールが複数ある場合は、「インライン」ダイアログが開きます。

  3. 「インライン」ダイアログが開いた場合は、次のようにします。

    • 選択したコールのインスタンスのみをインライン化するか、コールのすべてのインスタンスをインライン化するかを選択します。

    • 「OK」をクリックします。

8.5.20 変数の導入方法

Javaアプリケーションを開発する際に、式を変数の参照に簡単に変換できます。新しい変数宣言がメソッドに追加され、選択した式によって初期化されます。元の式は新しいメンバーの参照と置き換えられます。

式のタイプがvoidである場合、この式をメンバーに変換することはできません。

メンバーを導入するには、次のようにします。

  1. ソース・エディタで、式を選択します。

  2. メイン・メニューから「リファクタ」「変数の導入」を選択します。

    「変数の導入」ダイアログが開きます。

  3. 複数のデータ型がフィールドで有効な場合、ドロップダウン・リストから「型」を選択します。

    メニューには、この式に一致するタイプがすべて表示されます。有効な型が1つのみの場合、「型」フィールドは表示されません。

  4. 「名前」フィールドで、変数に推奨される名前を変更または置換します。

    ドロップダウン・メニューから、推奨される名前を選択できます。

  5. 変数の宣言にfinal修飾子を追加する場合は、「finalを宣言」を選択します。

  6. 「OK」をクリックします。

8.5.21 パラメータの導入方法

Javaアプリケーションを開発する際に、メソッド本体の定数式をメソッドの新しいパラメータに簡単に変換できます。式は新しいパラメータの名前に置き換えられ、新しいパラメータがメソッドのパラメータ・リストに追加されます。また、すべてのメソッドの起動で、この式は追加引数として挿入されます。

リテラルまたはリテラルの操作が存在する場合にのみ、式をパラメータとして導入できます。

この操作は、インタフェースを実装するメソッドに対しては禁止されています。このようなメソッドのシグネチャを変更すると、実装が無効化されます。

パラメータを導入するには、次のようにします。

  1. ソース・エディタで、式を選択します。

  2. メイン・メニューから「リファクタ」「パラメータの導入」を選択します。

  3. 「タイプ」ドロップダウン・メニューからフィールドのタイプを選択します。

    メニューには、この式に一致するタイプがすべて表示されます。有効なタイプが1つのみの場合、このオプションは表示されません。

  4. 「名前」フィールドで、変数に推奨される名前を変更または置換します。

    ドロップダウン・メニューから、推奨される名前を選択できます。

  5. 変数の宣言にfinal修飾子を追加する場合は、「finalを宣言」を選択します。

  6. 「OK」をクリックします。

8.5.22 定数の導入方法

Javaアプリケーションを開発する際に、定数式を定数参照に簡単に変換できます。定数式によって初期化された新しい定数宣言がクラスに追加され、元の定数式は定数の名前によって置き換えられます。

リテラルまたはリテラルの操作が存在する場合にのみ、式を定数として導入できます。

定数を導入するには、次のようにします。

  1. ソース・エディタで、式を選択します。

  2. メイン・メニューから「リファクタ」「定数の導入」を選択します。

    「定数の導入」ダイアログが開きます。

  3. 「タイプ」ドロップダウン・メニューからフィールドのタイプを選択します。

    メニューには、この式に一致するタイプがすべて表示されます。有効なタイプが1つのみの場合、このオプションは表示されません。

  4. 「名前」フィールドで、変数に推奨される名前を変更または置換します。

    ドロップダウン・メニューから、推奨される名前を選択できます。

  5. 「OK」をクリックします。

8.5.23 メソッドの抽出方法

Javaアプリケーションを開発する際に、メソッドの本体の一部を抽出して別のメソッドを簡単に作成できます。抽出したコードは、元のメソッドで新しいメソッドへのコールに置き換えられます。抽出したコードで使用されていたローカル変数およびパラメータは、新しいメソッドのパラメータになります。抽出したコードの文によって行われる割当てが存在する場合は、元のメンバーで新しいメソッドへのコール値を使用する割当てに変換されます。

抽出を行うには、コードが次の制限を満たす必要があります。

  • 単一の完全な式または一連の完全な文で構成されていること。

  • 選択したコードの外部に宣言がある、複数の変数に割り当てることができないこと。

  • 複数の終了ポイントを使用できないこと。終了ポイントとは、選択したコードで捕捉されない例外をスローする文、選択したコードの外部のループのbreakまたはcontinue文、またはreturn文です。

新しいメソッドは、元のメソッドと同じクラスに追加されます。新しいメソッドは、privateとして宣言されます。


注意:

選択したコード・ブロックのみが、抽出されたメソッドによって置換されます。その他の同じコード・ブロックは置換されません。

メソッドを抽出するには、次のようにします。

  1. ソース・エディタで、抽出する式または一連の式を選択します。

  2. メイン・メニューから、「リファクタ」「メソッドの抽出」を選択します。

  3. 新しいメソッドの名前を入力します。

  4. 「パラメータ」リストで、選択したコードに表示されるローカル変数およびパラメータに対して行う置換を指定します。

    • 「名前」列には、元の名前と似ているか同じ置換名が表示されます。これらの名前を選択して変更できます。

    • 「対象」列で、新しいメソッドのパラメータとなる提案パラメータを選択します。選択しないパラメータは、新しいメソッドでは初期化されていないローカル変数になります。

    • 「上へ」ボタンと「下へ」ボタンを使用してパラメータを並べ替えます。

  5. 新しいメソッドをstaticとして宣言する場合は、「static」を選択します。

    メソッドがstaticメソッドからコールされるためにメソッドが強制的にstaticに設定されている場合、またはstatic以外のメンバーを使用するためにメソッドがstatic以外に強制的に設定されている場合は、このオプションは無効です。

  6. 「OK」をクリックします。

    新しいメソッドはクラスに追加され、選択したコードは新しいメソッドへのコールによって置き換えられます。

  7. 「パラメータ」リスト内の提案パラメータを選択しない場合は、新しいメソッドを編集してローカル変数を初期化します。

8.5.24 クラスの抽出方法

クラスのフィールドとメソッドを置き換えるには、新しいクラスを抽出します。フィールドへのすべての参照は、その新しいクラスにアクセスするように更新されます。クラスを抽出すると、複雑になりすぎたクラスを管理できます。

クラスを抽出するには:

  1. ソース・エディタで、抽出するクラスを選択します。

  2. メイン・メニューから、「リファクタ」「クラスの抽出」を選択します。

  3. 新しいクラスの名前を入力します。

  4. 「内部クラス」を選択して、新しいクラスを内部クラスにします。

    このオプションを選択すると、最上位クラスが作成されます。

  5. 新しいクラスの抽出したフィールドにgetterメソッドとsetterメソッドを生成するかどうかを選択します。

  6. 新しいクラスに抽出するメソッドを選択します。

  7. 「使用方法の置換」を選択して、抽出したクラスのすべての使用方法を置換します。

8.5.25 コンストラクタをファクトリ・メソッドと置換する方法

コンストラクタをファクトリ・メソッドに変換できます。コンストラクタによって、クラスのインスタンスが作成されます。ファクトリ・メソッドは、ネイティブ・クラスのインスタンスを返すstaticメソッドです。ファクトリ・メソッドは、コンストラクタが非常に制約的な状況で使用できます。

コンストラクタをファクトリ・メソッドに変換するには、次のようにします。

  1. 「構造」ウィンドウまたはJavaソース・エディタで、コンストラクタ名を選択します。

  2. メイン・メニューから、「リファクタ」「コンストラクタをファクトリ・メソッドと置換」を選択します。

  3. 「メソッド名」ボックスで、新しいメソッドの名前を入力します。

    ボックスには、現在のクラス名に基づいて提案された名前がすでに表示されています。

  4. コンストラクタをファクトリ・メソッドに変換するには、「OK」をクリックします。

8.5.26 フィールドをカプセル化する方法

カプセル化によってクラス内のフィールドがprivateになり、publicメソッド経由でフィールドにアクセスできるようになります。フィールドがprivateと宣言された場合、クラスのアウトラインからそのフィールドにアクセスすることはできません。これにより、クラス内のフィールドが非表示になります。publicアクセス可能なクラスのフィールドを、クラス内からのみアクセス可能に変更できます。

フィールドをカプセル化するには、次のようにします。

  1. 「構造」ウィンドウまたはJavaソース・エディタでフィールド名(またはその親クラス)を選択します。

  2. メイン・メニューから、「リファクタ」「フィールドのカプセル化」を選択します。

  3. 「フィールド」表で、カプセル化する各フィールドの隣にあるボックスを選択します。

    メソッドまたはフィールドのアクセス・レベルおよび置換の有効範囲に関するオプションを、フィールドごとに指定することもできます。

  4. 「アクセッサの置換」ボックスで、カプセル化の一部としてアクセッサを置換する方法を選択します。

  5. 変更内容に基づいてタスクを作成し、「タスク」ウィンドウに追加する場合、「タスクをタスク・ウィンドウに追加」ボックスを選択します。

  6. 「OK」をクリックします。

8.5.27 ブール式の反転方法

Javaアプリケーションの開発中に、ブールのフィールド、パラメータまたはローカル変数を選択し、反対の値で初期化できます。JDeveloperは自動的にすべての参照を修正し、同じコード機能を維持します。JDeveloperがすべてのフィールド、パラメータ、ローカル変数を参照し、すべての使用方法を反転します。このリファクタによって、ブールのメソッドまたは変数の意味が反転します。trueに評価されるブール式はfalseになります。同様に、falseに評価されるブール式はtrueになります。

たとえば、有効になっている変数があり、その意味を反転する場合には、「ブールの反転」メニューの選択によって、使用方法を無効にします。

ブールを反転するには、次のようにします。

  1. ソース・エディタで、ブール式を選択します。

  2. 式を右クリックし、「リファクタ」「ブールの反転」を選択します。

    表8-2は、反転したブール式の例を示しています。

表8-2 ブールの反転の例

変更前 変更後
private double a;...public boolean method() {
 if (enabled){
   a =5;
   return true; }
 false;}
private double a;...public boolean method() {
 if (disabled{
  a =5;
  return false; }
 return true;}

8.5.28 XMLスキーマのリファクタ

スキーマのターゲット・ネームスペースが変更されると、参照するスキーマはすべて更新され、新しいターゲット・ネームスペースが割り当てられます。

ファセットのあるsimpletype要素に対してベース・タイプを変更した場合、すべてのファセットが削除されることはありません。そのかわりに、まだ有効なファセットが保持されます。