注:内容翻译自官网参考文档中 Java Generated Code 的 oneof 一节。
给假设有一个类似这样的oneof定义:
oneof oneof_name {
int32 foo_int = 4;
string foo_string = 9;
...
}
在 oneof_name 这个 oneof 中的所有字段将为他们的值使用共享的 oneof_name 对象。此外,protocol buffer compiler 将为每个oneof case生成一个Java枚举类型,如下所示:
public enum OneofNameCase implements com.google.protobuf.Internal.EnumLite {
FOO_INT(4),
FOO_STRING(9),
...
ONEOF_NAME_NOT_SET(0);
...
};
这个枚举类型的值有下列特殊方法:
编译器也将在消息类和它的builder中生成下列访问方法:
编译器将仅在消息的builder中生成下列方法: