2012-02-25 10 views
7

Tengo problemas para acceder a los miembros de búfer de protocolo ampliado. Aquí está el panorama:Extensión de búferes de protocolo en Java

Message Foo { optional int i = 1; } 

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

que no tienen la barra de mensajes dentro de cualquiera de mis otros protos. ¿Cómo puedo obtener Bar.j en Java? Todos los ejemplos que he encontrado requieren una barra dentro de un mensaje.

Gracias!

Respuesta

8

Las extensiones en Protocolo Buffer no funcionan necesariamente como era de esperar, es decir, no coinciden con el mecanismo de herencia de Java.

para su problema, yo he creado al foobar.proto siguiente archivo:

package test; 

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

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

Se crea Foobar.java, que contiene las clases Foobar.Bar y Foobar.Foo.

Y aquí es un simple caso de prueba JUnit para acceder 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)); 
    } 
} 

Esperanza que ayuda a clarificar su problema!

Cuestiones relacionadas