2015-08-23 68 views
2

枚舉比方說,我有在Java中定義了以下枚舉:協議緩衝區的Java,序列化有場

public enum DogBreed { 
    GERMAN_SHEPHERD, 
    FRENCH_BULLDOG, 
    ... 
} 

public enum Dog { 
    MAX(DogBreed.GERMAN_SHEPHERD), 
    SCOOTER(DogBreed.FRENCH_BULLDOG), 
    ... 

    private final DogBreed breed; 
} 

在原型文件描述DogBreed是很簡單的,但我不能找到一種方法,描述Dog枚舉。

+0

這是如何定義枚舉的:https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html – bobbel

+0

@bobbel:原始的海報似乎完全知道如何創建枚舉類,但是你的鏈接與他的主要問題有什麼關係 - 將嵌套的枚舉表示爲原始文件?我認爲你可能不完全理解他的問題。 –

+0

嗯,我認爲「描述」只是在這種情況下「寫作」的另一個詞。所以,請向我解釋一下,「描述」這個枚舉的意思是什麼,以及「proto文件」是什麼意思?也許你可以給這個問題多一點背景。 – bobbel

回答

0

隨着我掛在評論中我能寫出下面的原型文件答案的幫助:

import "google/protobuf/descriptor.proto"; 

extend google.protobuf.EnumValueOptions { 
    DogMessage.DogBreed dogBreed = 51234; 
} 

message DogMessage { 
    enum DogBreed { 
    GERMAN_SHEPHERD = 0; 
    FRENCH_BULLDOG = 1; 
    } 

    enum Dog { 
    MAX  = 0 [(dogBreed) = GERMAN_SHEPHERD]; 
    SCOOTER = 1 [(dogBreed) = FRENCH_BULLDOG]; 
    } 
} 

dogBreed值爲然後使用getValueDescriptor.getOptions()

客戶端訪問但是,我意識到我最終並不需要它。我試圖完全複製我的數據模型類。那是因爲我來自JSON序列化世界,在那裏您發送並接收您的數據模型類。
但由於protobuf的使用中間表示級我也可以寫:

message DogMessage { 
    string dogName = 0; 
    string dogBreed = 1; 
} 

我就可以基於對對方的字符串值來重建我的數據模型枚舉。

感謝您尋找到這

編輯:進一步實現:不要緊什麼Dog枚舉製成的。只要我轉移其中一個值(MAX,SCOOTER),我就可以根據這個單一值完全重構枚舉。