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