我在访问扩展协议缓冲区成员时遇到了问题。以下是场景:
Message Foo { optional int i = 1; }
message Bar { extend Foo {
optional int j = 10001; } }
我在其他的原型中没有Bar消息。如何在Java中获取Bar.j?我找到的所有示例都需要消息中有一个Bar。
谢谢!
我在访问扩展协议缓冲区成员时遇到了问题。以下是场景:
Message Foo { optional int i = 1; }
message Bar { extend Foo {
optional int j = 10001; } }
我在其他的原型中没有Bar消息。如何在Java中获取Bar.j?我找到的所有示例都需要消息中有一个Bar。
谢谢!
Protocol Buffer中的扩展并不像您所期望的那样工作,即它们与Java继承机制不匹配。
针对您的问题,我创建了以下foobar.proto
文件:
package test;
message Foo {
optional int32 i = 1;
extensions 10 to 99999;
}
message Bar {
extend Foo {
optional int32 j = 10001;
}
}
它创建了Foobar.java
文件,其中包含了Foobar.Bar
和Foobar.Foo
类。
以下是一个简单的JUnit测试用例,访问Bar.j:
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import test.Foobar.Bar;
import test.Foobar.Foo;
public class TestFooBar {
@Test
public void testFooBar() {
Foo foo = Foo.newBuilder().setI(123).setExtension(Bar.j, 456).build();
assertEquals(Integer.valueOf(456), foo.getExtension(Bar.j));
}
}