Ben*_*Ben 7 java buffer extends protocols protocol-buffers
我无法访问扩展协议缓冲区成员.这是场景:
Message Foo { optional int i = 1; }
message Bar { extend Foo {
optional int j = 10001; } }
Run Code Online (Sandbox Code Playgroud)
我的任何其他原型中都没有Bar消息.我怎样才能在Java中获得Bar.j?我发现的所有示例都需要消息中的条形码.
谢谢!
协议缓冲区中的扩展不能像您期望的那样工作,即它们与Java继承机制不匹配.
对于您的问题,我创建了以下foobar.proto文件:
package test;
message Foo {
optional int32 i = 1;
extensions 10 to 99999;
}
message Bar {
extend Foo {
optional int32 j = 10001;
}
}
Run Code Online (Sandbox Code Playgroud)
它创建Foobar.java,包含类Foobar.Bar和Foobar.Foo.
这是一个访问Bar.j的简单JUnit测试用例:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
希望有助于澄清您的问题!
| 归档时间: |
|
| 查看次数: |
5623 次 |
| 最近记录: |