के माध्यम से उत्तीर्ण करने वाले एम्स के रूप में enums आदिम प्रकार नहीं हैं, एंड्रॉइड में एक सहायता इंटरफ़ेस के माध्यम से एक enum पारित करने का सबसे प्रभावी तरीका क्या है? क्या एनम को पहले एक ordinal में बदलने का कोई तरीका है?सहायता इंटरफ़ेस
उत्तर
गैर आदिम प्रकार,
String
के अलावा, एक दिशात्मक सूचक की आवश्यकता है। दिशात्मक संकेतकों मेंin
,out
औरinout
शामिल हैं।
कि के लिए आधिकारिक दस्तावेज पर एक नज़र डालें: http://developer.android.com/guide/developing/tools/aidl.html#aidlsyntax
इसके अलावा, आप स्ट्रिंग या enum की क्रमसूचक प्रतिनिधित्व गुजर पर विचार करने और इसे वापस अनुवाद कर जब जरूरत कर सकते हैं। यह प्रभावी जावा 2 संस्करण से लिया जाता है:
// Implementing a fromString method on an enum type
private static final Map<String, Operation> stringToEnum = new HashMap<String, Operation>();
static { // Initialize map from constant name to enum constant
for (Operation op : values())
stringToEnum.put(op.toString(), op);
} // Returns Operation for string, or null if string is invalid
public static Operation fromString(String symbol) {
return stringToEnum.get(symbol);
}
ऊपर मामले में, Operation
एक enum
है।
एक enum की क्रमसूचक इस उदाहरण पर विचार प्राप्त करने के लिए:
public enum Badges{
GOLD, SILVER, BRONZE;
}
// somewhere else:
int ordinal = Badges.SILVER.ordinal();// this should be 1
यदि आप इसकी मदद कर सकते हैं, तो आपको पूरी तरह से एम्स से बचने पर विचार करना चाहिए (एक एंड्रॉइड प्रोजेक्ट में)। http://developer.android.com/guide/practices/design/performance.html#avoid_enums –
दुर्भाग्य से मेरे पास enums से परहेज करने का विकल्प नहीं है; यह एक सहयोगी परियोजना है। क्या मैं एक enum मूल्य के ordinal निकाल सकते हैं? – Phillip
हां, आप कर सकते हैं। मुझे सवाल संपादित करने दें। – Cristian
मैं बस का उपयोग
String enumString = myEnum.name()
(enum और myEnum मूल्य के रूप में के रूप में MyEnum के साथ) स्ट्रिंग प्रतिनिधित्व प्राप्त करने के लिए और फिर
MyEnum myEnum = MyEnum.valueOf(enumString)
स्ट्रिंग प्रतिनिधित्व से enum पुनर्निर्माण करने के लिए।
ऑर्डिनल का उपयोग करना थोड़ा तेज़ हो सकता है लेकिन अगर मैं बाद में एम्स जोड़ सकता हूं, तो पुराने कोड को तोड़ने की संभावना अधिक है।
// संपादित करें: मैं स्ट्रिंग वापसी प्रकार के रूप में करने के लिए पसंद नहीं है के रूप में, मैं अब यहाँ उल्लेख की तरह Parcellable कार्यान्वित: Passing enum or object through an intent (the best solution)
आयात android.os.Parcel; आयात android.os.Parcelable;
enum InitResponse implements Parcelable {
// Everything is fine.
SUCCESS,
// Something else
FOO;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(final Parcel dest, final int flags) {
dest.writeString(name());
}
public static final Creator<InitResponse> CREATOR = new Creator<InitResponse>() {
@Override
public InitResponse createFromParcel(final Parcel source) {
return InitResponse.valueOf(source.readString());
}
@Override
public InitResponse[] newArray(final int size) {
return new InitResponse[size];
}
};
}
अब मैं इस दृष्टिकोण को http://stackoverflow.com/questions/2836256/passing-enum-or-object-through-an-intent-the-best-solution से पठनीय-कार्यान्वयन के साथ इस दृष्टिकोण को जोड़कर समाप्त हुआ जिसके परिणामस्वरूप संपादित कोड ऊपर। – domenukk
- 1. उपयोगकर्ता इंटरफ़ेस - इनलाइन सहायता ओवरले
- 2. डब्ल्यूसीएफ सुरक्षा सहायता प्रदाता इंटरफ़ेस (एसएसपीआई) बातचीत
- 3. सहायता
- 4. सहायता
- 5. सहायता
- 6. सहायता
- 7. सहायता
- 8. सहायता()
- 9. प्रक्रिया। जावा में सहायता सहायता
- 10. इंटरफ़ेस
- 11. लाटेक्स सहायता
- 12. सहायता घर
- 13. सहायता विधानसभा
- 14. सहायता "?" बटन
- 15. सहायता हास्केल
- 16. Map.Entry इंटरफ़ेस
- 17. इंटरफ़ेस
- 18. इंटरफ़ेस
- 19. इंटरफ़ेस
- 20. इंटरफ़ेस
- 21. इंटरफ़ेस
- 22. इंटरफ़ेस
- 23. इंटरफ़ेस
- 24. इंटरफ़ेस
- 25. इंटरफ़ेस
- 26. इंटरफ़ेस
- 27. इंटरफ़ेस
- 28. इंटरफ़ेस
- 29. इंटरफ़ेस
- 30. इंटरफ़ेस प्रलेखन इंटरफ़ेस कार्यान्वयन वर्ग
चार्ली कॉलिन्स की टिप्पणी पर एक नज़र डालें। यह पूरी तरह से सच है: जितना संभव हो सके enums से बचें। – Cristian
@ क्रिस्टियन जिसे नमक के अनाज से लिया जाना चाहिए। enums अच्छे डिजाइन हैं। एक कारण है कि एंड्रॉइड भाषा से enums को नहीं हटाता है। –
यह सच दोस्त है। हालांकि, मुझे लगता है कि उन्होंने इसे स्थानांतरित नहीं किया क्योंकि यह इतना आसान नहीं है। बाइटकोड को हटाने से पहले वे अभी भी 'जावैक' का उपयोग करते हैं। वैसे भी ... मैं enums प्यार करता हूँ, और जब वे चीजों को स्पष्ट और सुरुचिपूर्ण बनाते हैं तो उनका उपयोग करें। – Cristian