Расширение буферов протокола в Java - PullRequest
7 голосов
/ 25 февраля 2012

У меня проблемы с доступом к расширенным элементам буфера протокола. Вот сценарий:

Message Foo {   optional int i = 1; }

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

У меня нет сообщения Бар в других моих протосах. Как я могу получить Bar.j на Java? Для всех примеров, которые я нашел, в сообщении требуется полоса.

Спасибо!

1 Ответ

8 голосов
/ 28 февраля 2012

Расширения в буфере протокола не обязательно работают так, как вы ожидаете, то есть они не соответствуют механизму наследования 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));
    }
}

Надеюсь, это поможет прояснить вашу проблему!

...