Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

创建 Java 类或类型

借助 Create New Class 对话框和文件模板,Android Studio 可帮助您快速新建以下类和类型:

  • Java 类
  • 枚举和单例类
  • 接口和注释类型

在填充 Create New Class 对话框字段并点击 OK 后,Android Studio 会创建一个包含框架代码的 .java 文件,其中包括 package 语句、所有必要的导入、头文件以及类或类型声明。接下来,您可以向此文件中添加代码。

文件模板会指定 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),请参阅文件和代码模板以及文件和代码模板对话框

创建 Java 类或类型

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

要创建新的 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) - 新类或类型实现的一个或多个接口。多个接口之间应该用英文逗号分隔,后面可以跟一个空格。您可以输入软件包和接口名称,或只输入接口名称,然后双击下拉列表中的某项内容以自动填充它。
    • 自动填充功能仅适用于第一个接口名称。请注意,虽然逗号和后面的接口名称可能会引发提示错误,但您可以忽略该错误,因为它不会影响生成的代码。

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

    • Visibility - 指定相应类或类型对所有类可见,还是仅对自己的软件包中的类可见。
    • Modifiers - 选择 AbstractFinal 作为 Class 的修饰符,或两者都不选择。
    • Show Select Overrides Dialog - 如果 Kind 设为 Class,请在点击 OK 后选中此选项以打开“Select Methods to Override/Implement”对话框。在此对话框中,您可以选择想要替换或实现的方法,Android Studio 将为这些方法生成框架代码。

    不适用于 Kind 的所有字段都将处于隐藏状态。

  4. 点击 OK
  5. Android Studio 会使用您可以修改的框架代码创建 Java 文件。它会在代码编辑器中打开该文件。

注意:您可以通过依次选择 File > New > SingletonFile > 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 {
    }
    

类文件模板

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

枚举文件模板

    #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 - 相应类是否具有公共访问权限。它的值可以是 PUBLICPACKAGE_PRIVATE
  • SUPERCLASS - 单个类名称,或为空。如果存在,则新类名称后面将有一个 extends ${SUPERCLASS} 子句。
  • INTERFACES - 以英文逗号分隔的接口列表,或为空。如果存在,则父类(如果没有父类,则在类名称后面)之后将有一个 implements ${INTERFACES} 子句。对于接口和注释类型,接口具有 extends 关键字。
  • ABSTRACT - 相应类是否应为抽象类。其值可以为 TRUEFALSE
  • FINAL - 相应类是否应为 final 类。其值可以为 TRUEFALSE