我的目标是在类似于json的Tree类型中生成AddressBook的类型,包括嵌套结构。除了Protobuf的Enum之外,所有其他字段都将转换为Java的类型。
现在,我有一个fieldDescriptor,其类型为Descriptors.FieldDescriptor.JavaType.ENUM。我想从中获取EnumTypeInfo。
简单来说,我有.proto文件生成的AddressBook.java
。 AddressBook.newBuilder().getDescriptorForType().getFields().get(0)
获得了fieldDescriptor。
switch (fieldDescriptor.getType()) {
case ENUM:
// The param is wrong. What's the right way?
return Types.ENUM(fieldDescriptor.getEnumType().getClass());
}
// This method is written by others and I can not change it.
public static <E extends Enum<E>> TypeInformation<E> ENUM(Class<E> enumType) {
return new EnumTypeInfo<>(enumType);
}
返回的EnumTypeInfo应该包含Enum中所有值的信息。通过fieldDescriptor.getEnumType()。getValues(),我可以获取Enum中的所有值。如果我只是使用Types.ENUM(java.lang.Enum.class),则enumClass.getEnumConstants()将返回null,这不是我期望的。谢谢。