创建 Java 类或类型

借助“创建新类”对话框和文件模板,Android Studio 可以帮助您快速创建以下新类和类型

  • Java 类

  • 枚举和单例类
  • 接口和注解类型

在您填写**创建新类**对话框字段并点击**确定**后,Android Studio 将创建一个包含基本代码的.java文件,其中包括包语句、任何必要的导入、头部以及类或类型的声明。接下来,您可以将您的代码添加到此文件中。

文件模板指定 Android Studio 如何生成基本代码。您可以按原样使用 Android Studio 提供的文件模板,也可以自定义它们以适应您的开发流程。

查看和自定义文件模板

Android Studio 提供文件模板,用于确定如何使用**创建新类**对话框创建新的 Java 类和类型。您可以自定义这些模板。

The Create New Class dialog.

图 1. **创建新类**对话框。

Android Studio 文件模板包括 Velocity 模板语言(VTL)代码和处理这些附加选项的变量。**创建新类**对话框使用**AnnotationType**、**Class**、**Enum**、**Interface** 和**Singleton** 文件模板。

要查看模板、查找自定义项和修改模板,请按照以下步骤操作

  1. 执行以下操作之一

    • 对于 Windows 或 Linux,选择**文件 > 设置 > 编辑器 > 文件和代码模板 > 文件**。
    • 对于 macOS,选择**Android Studio > 首选项 > 编辑器 > 文件和代码模板 > 文件**。

    模板列表中,内部模板名称以粗体显示。自定义模板名称以突出显示颜色(如蓝色)显示。

  2. 根据需要自定义文件模板。

    如果您想使用**创建新类**对话框字段,请确保您的更改符合Android Studio 文件模板代码

有关文件模板(包括 VTL)的更多信息,请参阅文件和代码模板文件和代码模板对话框

创建 Java 类或类型

Android Studio 可以帮助您根据文件模板创建新的 Java 类;枚举和单例类;以及接口和注解类型。

要创建新的 Java 类或类型,请按照以下步骤操作

  1. 在**项目**窗口中,右键单击 Java 文件或文件夹,然后选择**新建 > Java 类**。
  2. 或者,在**项目**窗口中选择一个 Java 文件或文件夹,或在代码编辑器中的 Java 文件中点击。然后选择**文件 > 新建 > Java 类**。

    您选择的项目将确定新类或类型的默认包。

  3. 在**创建新类**对话框中,填写以下字段
    • **名称** - 新类或类型的名称。它必须符合 Java 名称要求。不要键入文件扩展名。
    • **种类** - 选择类或类型的类别。
    • **超类** - 新类继承的类。您可以键入包和类名,或者只键入类名,然后双击下拉列表中的项目以自动完成它。
    • **接口** - 新类或类型实现的一个或多个接口。多个接口应以逗号分隔,后跟一个可选空格。您可以键入包和接口名,或者只键入接口名,然后双击下拉列表中的项目以自动完成它。
    • 自动完成仅适用于第一个接口名称。请注意,虽然逗号和后面的接口名称可能会显示工具提示错误,但您可以忽略该错误,因为它不会影响生成的代码。

    • **包** - 类或类型将驻留的包。默认值会自动显示在字段中。如果您在字段中键入包名,则包标识符中不存在的任何部分都将以红色突出显示;在这种情况下,Android Studio 会在您点击**确定**后创建该包。此字段必须包含值;否则,Java 文件将不包含package语句,并且类或类型不会放置在项目中的包内。
    • 默认值取决于您启动**创建新类**对话框的方式。如果您首先在**项目**窗口中选择了一个 Java 文件或文件夹,则默认值为所选项目的包。如果您首先在代码编辑器中的 Java 文件中点击,则默认值为包含此文件的包。

    • **可见性** - 选择类或类型对所有类可见,还是仅对自身包中的类可见。
    • **修饰符** - 为**类**选择**抽象**或**最终**修饰符,或两者都不选。
    • **显示选择覆盖对话框** - 对于**种类**为**类**,选中此选项以在您点击**确定**后打开选择要覆盖/实现的方法对话框。在此对话框中,您可以选择要覆盖或实现的方法,Android Studio 将为这些方法生成基本代码。

    任何不适用于**种类**的字段都将隐藏。

  4. 点击**确定**。
  5. Android Studio 将创建一个包含基本代码的 Java 文件,您可以对其进行修改。它将在代码编辑器中打开该文件。

注意:您可以通过选择**文件 > 新建 > 单例**或**文件 > 新建 > Java 类**来创建单例类;后一种方法提供了更多选项。

Android Studio 文件模板

本节列出了用VTL脚本语言编写的 Android Studio 文件模板代码,后跟变量的定义。您在**创建新类**对话框中提供的值将成为模板中的变量值。请注意,以#if (${VISIBILITY}开头的行一直延伸到开括号({)。

AnnotationType 文件模板

#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 {
}

Class 文件模板

#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 {
}

Interface 文件模板

#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 {
}

Singleton 文件模板

#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 文件中的值替换文件模板变量。您在**创建新类**对话框中输入这些值。模板具有以下您可以使用的变量

  • IMPORT_BLOCK - 一个换行符分隔的 Java import 语句列表,这些语句对于支持任何超类或接口是必要的,或者是一个空字符串("")。例如,如果您只实现了Runnable接口并且没有扩展任何内容,则此变量将为"import java.lang.Runnable;\n"。如果您实现了Runnable接口并扩展了Activity类,则它将为"import android.app.Activity;\nimportjava.lang.Runnable;\n"
  • VISIBILITY - 类是否具有公共访问权限。它可以具有PUBLICPACKAGE_PRIVATE的值。
  • SUPERCLASS - 单个类名,或为空。如果存在,则在新类名之后将有一个extends ${SUPERCLASS}子句。
  • INTERFACES - 一个逗号分隔的接口列表,或为空。如果存在,则将在超类之后或(如果不存在超类)在类名之后有一个implements ${INTERFACES}子句。对于接口和注解类型,接口具有extends关键字。
  • ABSTRACT - 类是否应该是抽象的。它可以具有TRUEFALSE的值。
  • FINAL - 类是否应该是最终的。它可以具有TRUEFALSE的值。