Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中协议缓冲区的扩展_Java_Protocols_Protocol Buffers_Extends_Buffer - Fatal编程技术网

Java中协议缓冲区的扩展

Java中协议缓冲区的扩展,java,protocols,protocol-buffers,extends,buffer,Java,Protocols,Protocol Buffers,Extends,Buffer,访问扩展协议缓冲区成员时遇到问题。以下是场景: Message Foo { optional int i = 1; } message Bar { extend Foo { optional int j = 10001; } } 我的其他原型中没有Bar信息。如何在Java中获取Bar.j?我发现的所有示例都需要在消息中包含一个条 谢谢 协议缓冲区中的扩展不一定像您预期的那样工作,即它们与Java继承机制不匹配 针对您的问题,我创建了以下foobar.proto文件: p

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

Message Foo {   optional int i = 1; }

message Bar {   extend Foo {
    optional int j = 10001;   } }
我的其他原型中没有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;
    }
}
它创建
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));
    }
}
希望这有助于澄清您的问题