2015-03-25 6 views
7

मेरे पास कई अलग-अलग स्कीमा हैं, हालांकि फ़ील्ड का एक सेट है जिसमें प्रत्येक स्कीमा शामिल है। मैं सोच रहा था कि क्या एक अलग स्कीमा एक मूल स्कीमा का विस्तार करने और अपने क्षेत्रों का वारिस करने का कोई तरीका था। उदाहरण के लिए इस मैं क्या चाहते है:विस्तार प्रोटोबफ संदेश

message Parent { 
    required string common1 = 0; 
    optional string common2 = 1; 
} 

message Child1 { // can we extend the Parent? 
    // I want common1, common2 to be fields here 
    required int c1 = 2; 
    required string c2 = 3; 
} 

message Child2 { // can we extend Parent? 
    // I want common1, common2 to be fields here 
    repeated int c3 = 2; 
    repeated string c4 = 3; 
} 

इस तरह की है कि Child1 और Child2 भी फ़ील्ड शामिल common1 और common2 (और संभवतः अधिक) जनक से।

क्या यह संभव है और यदि ऐसा है तो कैसे?

+0

विरासत समर्थित नहीं है का उपयोग करने के लिए है, लेकिन एक गरीब आदमी का समाधान के रूप में, आप एक नेस्टेड निर्माण इस्तेमाल कर सकते हैं जहां 'Child1' और के पहले क्षेत्र' चाइल्ड 2 'प्रकार' माता-पिता का प्रकार है। "बेस-क्लास" में फ़ील्ड तक पहुंचने के लिए, आपको पहले उस 'पैरेंट' टाइप किए गए फ़ील्ड को स्पष्ट रूप से एक्सेस करना होगा। –

+0

एक्सटेंशन भी हैं। https://developers.google.com/protocol-buffers/docs/proto#extensions – engineerC

उत्तर

2

यह आपके प्रश्न का सही उत्तर नहीं है, लेकिन हम सामान्य पैरामीटर साझा करने के लिए ऐसा कुछ कर सकते हैं।

message Child1 { 
    required int c1 = 2; 
    required string c2 = 3; 
} 

message Child2 { 
    required int c1 = 2; 
    required string c2 = 3; 
} 

message Request { 
    required string common1 = 0; 
    optional string common2 = 1; 
    oneof msg { Child1 c1 = 2; Child2 c2 = 3; } 

} 

अन्य विकल्प कीवर्ड का विस्तार

message Parent { 
    required string common1 = 0; 
    optional string common2 = 1; 
} 

message Child1 { 
    extend Parent 
    {  
     optional Child1 c1 = 100; 
    } 

    required int c1 = 2; 
    required string c2 = 3; 
} 
+4

विस्तार प्रोटो बफर 3 में समर्थित नहीं है –

संबंधित मुद्दे