2012-02-25 19 views
7

Ho problemi ad accedere ai membri del buffer del protocollo esteso. Ecco lo scenario:Estensione dei buffer di protocollo in Java

Message Foo { optional int i = 1; } 

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

Non ho il messaggio Bar in nessuno dei miei altri protos. Come posso ottenere Bar.j in Java? Tutti gli esempi che ho trovato richiedono una barra all'interno di un messaggio.

Grazie!

risposta

8

Le estensioni nel protocollo Buffer non funzionano necessariamente come ci si aspetterebbe, ovvero non corrispondono al meccanismo di ereditarietà Java.

per il vostro problema, io ho creato il file di foobar.proto seguente:

package test; 

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

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

Si crea Foobar.java, contenente le classi Foobar.Bar e Foobar.Foo.

E qui è un semplice caso di test JUnit accesso 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)); 
    } 
} 

Speranza che aiuta chiarire il tuo problema!

Problemi correlati