在接口不兼容 Java(例如由于使用联合类型而不兼容 Java)的情况下,可能仍需将常量(枚举值)导出到 Java 环境。这种情况需要用到 hidl-gen -Ljava-constants
…
,它会将已添加注解的枚举声明从软件包的接口文件中提取出来,并生成一个名为 [PACKAGE-NAME]-V[PACKAGE-VERSION]-java-constants
的 java 库。请为每个要导出的枚举声明添加注解,如下所示:
@export enum Foo : int32_t { SOME_VALUE, SOME_OTHER_VALUE, };
如有必要,这一类型导出到 Java 环境时所使用的名称可以不同于接口声明中选定的名称,方法是添加注解参数 name
:
@export(name="JavaFoo") enum Foo : int32_t { SOME_VALUE, SOME_OTHER_VALUE, };
如果依据 Java 惯例或个人偏好需要将一个公共前缀添加到枚举类型的值,请使用注解参数 value_prefix
:
// File "types.hal". package android.hardware.bar@1.0; @export(name="JavaFoo", value_prefix="JAVA_") enum Foo : int32_t { SOME_VALUE, SOME_OTHER_VALUE, };
生成的 Java 类如下所示:
package android.hardware.bar.V1_0; public class Constants { public final class JavaFoo { public static final int JAVA_SOME_VALUE = 0; public static final int JAVA_SOME_OTHER_VALUE = 1; }; };
最后,针对 types.hal
中声明的枚举类型的 Java 类型声明将划分到给定软件包中的类 Constants
内。声明为接口子级的枚举类型将划分到该接口的 Java 类声明下。