借助创建新类 (Create New Class) 对话框和文件模板,Android Studio 可帮助您快速创建以下新类和类型:
- Java 类
- 枚举类和单例类
- 接口和注解类型
填写创建新类对话框中的字段并点击确定 (OK) 后,Android Studio 会创建一个包含骨架代码的 .java 文件,其中包括 package 语句、任何必要的 import 语句、标头以及类或类型声明。接下来,您可以将自己的代码添加到该文件中。
文件模板规定了 Android Studio 如何生成骨架代码。您可以直接使用 Android Studio 提供的文件模板,也可以根据自己的开发流程对它们进行自定义。
查看和自定义文件模板
Android Studio 提供的文件模板决定了如何使用创建新类对话框创建新的 Java 类和类型。您可以自定义这些模板。
图 1. 创建新类对话框。
Android Studio 文件模板包含 Velocity 模板语言 (VTL) 代码和用于处理这些附加选项的变量。创建新类对话框会使用 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。
在模板列表中,内部模板名称以粗体显示。自定义模板名称则以高亮颜色(例如蓝色)显示。
根据需要自定义文件模板。
如果您想使用创建新类对话框中的字段,请确保您的更改符合 Android Studio 文件模板代码。
如需了解有关文件模板(包括 VTL)的更多信息,请参阅文件和代码模板以及“文件和代码模板”对话框。
创建 Java 类或类型
Android Studio 可帮助您根据文件模板创建新的 Java 类、枚举类和单例类,以及接口和注解类型。
要创建新的 Java 类或类型,请按照以下步骤操作:
- 在项目 (Project) 窗口中,右键点击 Java 文件或文件夹,然后选择 New > Java Class。
- 在创建新类对话框中,填写字段:
- Name - 新类或类型的名称。它必须符合 Java 命名要求。不要输入文件扩展名。
- Kind - 选择类或类型的类别。
- Superclass - 新类所继承的父类。您可以输入包名和类名,或者只输入类名,然后双击下拉列表中的项目进行自动补全。
- Interface(s) - 新类或类型实现的一个或多个接口。多个接口应使用逗号分隔,逗号后可选择添加空格。您可以输入包名和接口名,或者只输入接口名,然后双击下拉列表中的项目进行自动补全。
- Package - 类或类型所在的包。该字段会自动显示默认值。如果您在字段中输入包名,包标识符中不存在的部分会以红色高亮显示;在这种情况下,Android Studio 会在您点击确定后创建该包。此字段必须包含值;否则,Java 文件将不包含
package语句,并且该类或类型在项目中将不会位于任何包内。 - Visibility - 选择该类或类型是对所有类可见,还是仅对其自身包内的类可见。
- Modifiers - 为类 (Class) 选择 Abstract 或 Final 修饰符,或者两者都不选。
- Show Select Overrides Dialog - 如果类型 (Kind) 为类 (Class),请勾选此选项,以便在点击确定后打开“选择要重写/实现的方法”对话框。在此对话框中,您可以选择想要重写或实现的方法,Android Studio 将为这些方法生成骨架代码。
- 点击 **OK**。
或者,在项目窗口中选中一个 Java 文件或文件夹,或者在代码编辑器中点击某个 Java 文件。然后选择 File > New > Java Class。
您选择的项目决定了新类或类型的默认包。
自动补全仅适用于第一个接口名称。请注意,虽然逗号和随后的接口名称可能会弹出工具提示错误,但您可以忽略该错误,因为它不会影响生成的代码。
默认值取决于您启动创建新类对话框的方式。如果您先在项目窗口中选择了 Java 文件或文件夹,则默认值为所选项目的包。如果您先在代码编辑器中点击了 Java 文件,则默认值为包含该文件的包。
任何不适用于当前类型 (Kind) 的字段都将被隐藏。
Android Studio 会创建一个包含您可以修改的骨架代码的 Java 文件,并在代码编辑器中打开该文件。
注意:您可以通过选择 File > New > Singleton 或 File > New > Java Class 来创建单例类;后者提供了更多选项。
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。