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 TemplatesFile and Code Templates Dialog をご覧ください。

Java のクラスや型の作成

Android Studio では、ファイル テンプレートを基にして、Java の新しいクラス(Enum、シングルトン)と型(インターフェース、アノテーション)を作成できます。

Java の新しいクラスまたは型を作成する手順は次のとおりです。

  1. [Project] ウィンドウで Java のファイルまたはフォルダを右クリックし、[New] > [Java Class] を選択します。
  2. または、[Project] ウィンドウで Java のファイルまたはフォルダを選択するか、コードエディタで 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 のファイルまたはフォルダを選択した場合、デフォルト値は選択したアイテムのパッケージになります。最初にコードエディタで Java ファイルをクリックした場合、デフォルト値はこのファイルを含むパッケージになります。

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

    [Kind] で選択した値に関連しないフィールドは非表示になります。

  4. [OK] をクリックします。
  5. Android Studio は、変更可能なスケルトン コードを含む Java ファイルを作成して、コードエディタで開きます。

注: [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}() {
    }
}

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

Android Studio により、ファイル テンプレート変数は、生成された 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 のいずれかです。