2012-02-25 30 views
7

Tôi gặp sự cố khi truy cập các thành viên bộ đệm giao thức mở rộng. Đây là kịch bản:Mở rộng bộ đệm giao thức trong Java

Message Foo { optional int i = 1; } 

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

Tôi không có thư trong bất kỳ hình ảnh nào khác của tôi. Làm thế nào tôi có thể nhận được Bar.j trong Java? Tất cả các ví dụ tôi đã tìm thấy yêu cầu một Bar trong một tin nhắn.

Cảm ơn!

Trả lời

8

Tiện ích mở rộng trong Protocol Buffer không hoạt động như bạn mong đợi, tức là chúng không khớp với cơ chế thừa kế Java.

Đối với vấn đề của bạn, tôi đã tạo ra foobar.proto tập tin sau đây:

package test; 

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

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

Nó tạo ra Foobar.java, chứa các lớp Foobar.BarFoobar.Foo.

Và đây là một trường hợp thử nghiệm JUnit đơn giản truy cập 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)); 
    } 
} 

Hy vọng rằng sẽ giúp làm rõ vấn đề của bạn!

Các vấn đề liên quan