借助“创建新类”对话框和文件模板,Android Studio 可以帮助您快速创建以下新类和类型
- Java 类
- 枚举和单例类
- 接口和注解类型
在您填写**创建新类**对话框字段并点击**确定**后,Android Studio 将创建一个包含基本代码的.java
文件,其中包括包语句、任何必要的导入、头部以及类或类型的声明。接下来,您可以将您的代码添加到此文件中。
文件模板指定 Android Studio 如何生成基本代码。您可以按原样使用 Android Studio 提供的文件模板,也可以自定义它们以适应您的开发流程。
查看和自定义文件模板
Android Studio 提供文件模板,用于确定如何使用**创建新类**对话框创建新的 Java 类和类型。您可以自定义这些模板。
Android Studio 文件模板包括 Velocity 模板语言(VTL)代码和处理这些附加选项的变量。**创建新类**对话框使用**AnnotationType**、**Class**、**Enum**、**Interface** 和**Singleton** 文件模板。
要查看模板、查找自定义项和修改模板,请按照以下步骤操作
执行以下操作之一
- 对于 Windows 或 Linux,选择**文件 > 设置 > 编辑器 > 文件和代码模板 > 文件**。
- 对于 macOS,选择**Android Studio > 首选项 > 编辑器 > 文件和代码模板 > 文件**。
在模板列表中,内部模板名称以粗体显示。自定义模板名称以突出显示颜色(如蓝色)显示。
根据需要自定义文件模板。
如果您想使用**创建新类**对话框字段,请确保您的更改符合Android Studio 文件模板代码。
有关文件模板(包括 VTL)的更多信息,请参阅文件和代码模板和文件和代码模板对话框。
创建 Java 类或类型
Android Studio 可以帮助您根据文件模板创建新的 Java 类;枚举和单例类;以及接口和注解类型。
要创建新的 Java 类或类型,请按照以下步骤操作
- 在**项目**窗口中,右键单击 Java 文件或文件夹,然后选择**新建 > Java 类**。
- 在**创建新类**对话框中,填写以下字段
- **名称** - 新类或类型的名称。它必须符合 Java 名称要求。不要键入文件扩展名。
- **种类** - 选择类或类型的类别。
- **超类** - 新类继承的类。您可以键入包和类名,或者只键入类名,然后双击下拉列表中的项目以自动完成它。
- **接口** - 新类或类型实现的一个或多个接口。多个接口应以逗号分隔,后跟一个可选空格。您可以键入包和接口名,或者只键入接口名,然后双击下拉列表中的项目以自动完成它。
- **包** - 类或类型将驻留的包。默认值会自动显示在字段中。如果您在字段中键入包名,则包标识符中不存在的任何部分都将以红色突出显示;在这种情况下,Android Studio 会在您点击**确定**后创建该包。此字段必须包含值;否则,Java 文件将不包含
package
语句,并且类或类型不会放置在项目中的包内。 - **可见性** - 选择类或类型对所有类可见,还是仅对自身包中的类可见。
- **修饰符** - 为**类**选择**抽象**或**最终**修饰符,或两者都不选。
- **显示选择覆盖对话框** - 对于**种类**为**类**,选中此选项以在您点击**确定**后打开选择要覆盖/实现的方法对话框。在此对话框中,您可以选择要覆盖或实现的方法,Android Studio 将为这些方法生成基本代码。
- 点击**确定**。
或者,在**项目**窗口中选择一个 Java 文件或文件夹,或在代码编辑器中的 Java 文件中点击。然后选择**文件 > 新建 > Java 类**。
您选择的项目将确定新类或类型的默认包。
自动完成仅适用于第一个接口名称。请注意,虽然逗号和后面的接口名称可能会显示工具提示错误,但您可以忽略该错误,因为它不会影响生成的代码。
默认值取决于您启动**创建新类**对话框的方式。如果您首先在**项目**窗口中选择了一个 Java 文件或文件夹,则默认值为所选项目的包。如果您首先在代码编辑器中的 Java 文件中点击,则默认值为包含此文件的包。
任何不适用于**种类**的字段都将隐藏。
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
- 一个换行符分隔的 Javaimport
语句列表,这些语句对于支持任何超类或接口是必要的,或者是一个空字符串(""
)。例如,如果您只实现了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
- 类是否应该是最终的。它可以具有TRUE
或FALSE
的值。