在Java中扩展Protocol Buffers

7

我在访问扩展协议缓冲区成员时遇到了问题。以下是场景:

Message Foo {   optional int i = 1; }

message Bar {   extend Foo {
    optional int j = 10001;   } }

我在其他的原型中没有Bar消息。如何在Java中获取Bar.j?我找到的所有示例都需要消息中有一个Bar。

谢谢!

1个回答

8

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.BarFoobar.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));
    }
}

希望这能帮助澄清您的问题!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接