Java のクラスや型の作成

Android Studio で [Create New Class] ダイアログとファイル テンプレートを利用すると、以下のクラスと型をすばやく新規作成できます。

  • Java クラス
  • Enum クラスとシングルトン クラス
  • インターフェース型とアノテーション型

[Create New Class] ダイアログのフィールドに入力して [OK] をクリックすると、Android Studio によりスケルトン コードを含む .java ファイルが作成されます。これには、package 文、必要な import 文、ヘッダー、クラスまたは型の宣言が含まれています。その後、このファイルにコードを追加できます。

ファイル テンプレートでは、Android Studio によるスケルトン コードの生成方法を指定します。Android Studio で提供されるファイル テンプレートをそのまま使用することも、開発プロセスに合わせてカスタマイズすることもできます。

ファイル テンプレートの表示とカスタマイズ

Android Studio には、[Create New Class] ダイアログで Java の新しいクラスや型を作成する際の方法を定義するファイル テンプレートが用意されています。このテンプレートはカスタマイズ可能です。

[Create New Class] ダイアログ

図 1. [Create New Class] ダイアログ

Android Studio ファイル テンプレートには、このような追加オプションを処理するための Velocity Template Language(VTL)のコードと変数が含まれています。[Create New Class] ダイアログで使用するファイル テンプレートは、AnnotationTypeClassEnumInterfaceSingleton です。

テンプレートの表示、カスタマイズ部分の識別、テンプレートの変更は、次のように行います。

  1. 次のいずれかを行います。

    • Windows または Linux の場合、[File] > [Settings] > [Editor] > [File and Code Templates] > [Files] を選択します。
    • macOS の場合、[Android Studio] > [Preferences] > [Editor] > [File and Code Templates] > [Files] を選択します。

    テンプレート リストでは、内部テンプレートの名前は太字で示されます。また、カスタマイズされたテンプレートの名前は、ハイライト色(青など)で表示されます。

  2. 必要に応じて、ファイル テンプレートをカスタマイズします。

    [Create New Class] ダイアログ フィールドを使用する場合は、Android Studio ファイル テンプレートの記述に則して変更してください。

ファイル テンプレートの詳細(VTL を含む)については、File and Code Templates および File and Code Templates Dialog をご覧ください。

Java のクラスと型の作成

Android Studio を使用すると、ファイル テンプレートを使って Java のクラス(Enum、シングルトン)や型(インターフェース、アノテーション)を作成できます。

Java のクラスまたは型を作成するには、次の手順を実行します。

  1. [Project] ウィンドウで Java のファイルまたはフォルダを右クリックし、[New] > [Java Class] を選択します。
  2. あるいは、[Project] ウィンドウで Java のファイルまたはフォルダを選択するか、Code Editor で Java ファイルをクリックして、[File] > [New] > [Java Class] を選択します。

    選択した項目によって、新しいクラスまたは型のデフォルト パッケージが決まります。

  3. [Create New Class] ダイアログで、以下のフィールドに入力します。
    • Name - 新しいクラスまたは型の名前。Java の命名規則に準拠する必要があります。ファイル名拡張子は入力しないでください。
    • Kind - クラスまたは型のカテゴリを選択します。
    • Superclass - 新しいクラスの継承元となるクラス。パッケージとクラス名、またはクラス名のみを入力してから、プルダウン リストの項目をダブルクリックしてオートコンプリートできます。
    • Interface(s) - 新しいクラスまたは型が実装する 1 つ以上のインターフェース。インターフェースが複数ある場合は、カンマ(後にスペースを 1 つ入れても可)で区切る必要があります。パッケージとインターフェース名、またはインターフェース名のみを入力してから、プルダウン リストの項目をダブルクリックしてオートコンプリートできます。
    • オートコンプリートは、最初のインターフェース名に対してのみ機能します。カンマとそれに続くインターフェース名によってツールチップ エラーが生じる場合がありますが、生成されるコードには影響ありません。

    • Package - 新しいクラスまたは型の保存先パッケージ。自動的にデフォルトの値が表示されます。このフィールドにパッケージ名を入力すると、パッケージ識別子中の存在しない部分が赤でハイライト表示されます。この状態で [OK] をクリックすると、その名前のパッケージが作成されます。このフィールドには必ず値を入力します。入力しない場合、Java ファイルには package 文が含まれず、クラスや型はプロジェクトのパッケージ内に保存されません。
    • デフォルトの値は、[Create New Class] ダイアログの起動方法によって異なります。最初に [Project] ウィンドウで Java のファイルまたはフォルダを選択した場合は、デフォルトの値は選択したアイテムのパッケージになります。また、最初に Code Editor で Java ファイルをクリックした場合は、デフォルトの値はこのファイルを含むパッケージになります。

    • Visibility - 新しいクラスまたは型をすべてのクラスに公開するか、そのパッケージ内のクラスにのみ表示するかを選択します。
    • Modifiers - クラスの修飾子として、[Abstract]、[Final]、または「なし」を選択します。
    • Show Select Overrides Dialog - [Kind] が [Class] の場合、このオプションをオンにすると、[OK] をクリックした後で [Select Methods to Override/Implement] ダイアログが開きます。このダイアログでは、オーバーライドまたは実装するメソッドを選択できます。ここで選択したメソッドのスケルトン コードが、Android Studio により生成されます。

    指定した [Kind] に適用されないフィールドは表示されません。

  4. [OK] をクリックします。
  5. Android Studio により、変更可能なスケルトン コードを含んだ Java ファイルが作成され、Code Editor で開かれます。

注: [File] > [New] > [Singleton] または [File] > [New] > [Java Class] を選択することで、シングルトン クラスを作成できます。後者のほうが、より多くのオプションを使用できます。

Android Studio ファイル テンプレート

このセクションでは、VTL スクリプト言語で記述された Android Studio ファイル テンプレートのコードの一覧と、変数の定義を示します。[Create New Class] ダイアログで指定した値は、テンプレートにおける変数値になります。#if (${VISIBILITY} で始まる行は、次の開き中かっこ({)まで続いていることに注意してください。

アノテーション型のファイル テンプレート

    #if (${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end

    #if (${IMPORT_BLOCK} != "")${IMPORT_BLOCK}
    #end
    #parse("File Header.java")

    #if (${VISIBILITY} == "PUBLIC")public #end @interface ${NAME} #if (${INTERFACES} != "")extends ${INTERFACES} #end {
    }
    

クラスのファイル テンプレート

    #if (${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end

    #if (${IMPORT_BLOCK} != "")${IMPORT_BLOCK}
    #end
    #parse("File Header.java")

    #if (${VISIBILITY} == "PUBLIC")public #end #if (${ABSTRACT} == "TRUE")abstract #end #if (${FINAL} == "TRUE")final #end class ${NAME} #if (${SUPERCLASS} != "")extends ${SUPERCLASS} #end #if (${INTERFACES} != "")implements ${INTERFACES} #end {
    }
    

Enum クラスのファイル テンプレート

    #if (${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end

    #if (${IMPORT_BLOCK} != "")${IMPORT_BLOCK}
    #end
    #parse("File Header.java")

    #if (${VISIBILITY} == "PUBLIC")public #end enum ${NAME} #if (${INTERFACES} != "")implements ${INTERFACES} #end {
    }
    

インターフェース型のファイル テンプレート

    #if (${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end

    #if (${IMPORT_BLOCK} != "")${IMPORT_BLOCK}
    #end
    #parse("File Header.java")

    #if (${VISIBILITY} == "PUBLIC")public #end enum ${NAME} #if (${INTERFACES} != "")implements ${INTERFACES} #end {
    #end {
    }
    

シングルトン クラスのファイル テンプレート

    #if (${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end

    #if (${IMPORT_BLOCK} != "")${IMPORT_BLOCK}
    #end
    #parse("File Header.java")

    #if (${VISIBILITY} == "PUBLIC")public #end class ${NAME} #if (${SUPERCLASS} != "")extends ${SUPERCLASS} #end #if (${INTERFACES} != "")implements ${INTERFACES} #end {
        private static final ${NAME} ourInstance = new ${NAME}();

        #if (${VISIBILITY} == "PUBLIC")public #end static ${NAME} getInstance() {
            return ourInstance;
        }

        private ${NAME}() {
        }
    }
    

ファイル テンプレート変数

ファイル テンプレート変数は、生成された Java ファイルの値に置き換えられます。その値は、[Create New Class] ダイアログで入力したものです。テンプレートで使用できる変数には、次のものがあります。

  • IMPORT_BLOCK - スーパークラスやインターフェースをサポートするために必要な Java import 文の改行区切りリスト、または空の文字列("")。たとえば、Runnable インターフェースのみを実装し、何も拡張しない場合は、この変数は "import java.lang.Runnable;\n" になります。また、Runnable インターフェースを実装して Activity クラスを拡張する場合は、"import android.app.Activity;\nimportjava.lang.Runnable;\n" になります。
  • VISIBILITY - そのクラスを公開するかどうか。値は PUBLIC または PACKAGE_PRIVATE のいずれかです。
  • SUPERCLASS - 単一のクラス名、または空の文字列。存在する場合、新しいクラス名の後に extends ${SUPERCLASS} 句が付きます。
  • INTERFACES - インターフェースのカンマ区切りのリスト、または空の文字列。存在する場合、スーパークラス(ない場合はクラス名)の後に implements ${INTERFACES} 句が付きます。インターフェース型とアノテーション型の場合、インターフェースには extends キーワードが含まれます。
  • ABSTRACT - そのクラスを抽象クラスにするかどうか。値は TRUE または FALSE のいずれかです。
  • FINAL - そのクラスを final クラスにするかどうか。値は TRUE または FALSE のいずれかです。