2012-02-25 19 views
7

Mam problemy z dostępem do rozszerzonych członków bufora protokołu. Oto scenariusz:Przedłużanie buforów protokołów w Javie

Message Foo { optional int i = 1; } 

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

nie mam komunikat bar w żadnej z moich innych PROTOS. Jak mogę uzyskać Bar.j w Javie? Wszystkie znalezione przykłady wymagają paska w wiadomości.

Dzięki!

Odpowiedz

8

Rozszerzenia w buforze protokołów nie działają tak, jak można się spodziewać, tj. Nie pasują do mechanizmu dziedziczenia Java.

Dla Twojego problemu, ja stworzyliśmy następujące foobar.proto plik:

package test; 

message Foo { 
    optional int32 i = 1; 
    extensions 10 to 99999; 
} 

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

Tworzy Foobar.java, zawierający klasy Foobar.Bar i Foobar.Foo.

A oto prosty sprawdzian JUnit dostępu 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)); 
    } 
} 

nadzieję, że pomoże wyjaśnienia problemu!

Powiązane problemy