enumはプリミティブ型ではないので、Androidのaidlインターフェイスでenumを渡す最も効果的な方法は何ですか? enumをordinal firstに変換する方法はありますか?aidlインターフェイスでのenumの受け渡し
答えて
String
以外非プリミティブ型は、方向インジケータを必要とします。方向指示器は、
in
,out
およびinout
を含む。
そのための公式ドキュメントを見てみましょう:http://developer.android.com/guide/developing/tools/aidl.html#aidlsyntax
また、あなたは、列挙型の文字列または順序表現を渡すことを検討し、必要なときにそれをバック翻訳することができます。これは、効果的なJavaの第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
あります。
この例を考えてみ列挙の序数を取得するには:
public enum Badges{
GOLD, SILVER, BRONZE;
}
// somewhere else:
int ordinal = Badges.SILVER.ordinal();// this should be 1
私は単純に文字列表現を取得するために(値として列挙型とmyEnumなどMyEnumで)
String enumString = myEnum.name()
を使用次に
MyEnum myEnum = MyEnum.valueOf(enumString)
を使用して、String表現から列挙型を再構成します。
オライナルを使用する方が速いかもしれませんが、後で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-solutionsのParcellable-Implementationと組み合わせると、編集されたコードが作成されました上記。 – domenukk
- 1. HTTPクエリパラメータとしてのenum値のリストの受け渡し
- 2. 2つのアプリケーション間のAIDLインターフェイス
- 3. オブジェクトへのインターフェイスの受け渡し、またはCocoaでの委任の使用?
- 4. Pythonデータの受け渡し
- 5. CSRFトークンの受け渡し
- 6. Graphqlパラメータの受け渡し
- 7. Reflection.Emitパラメーターの受け渡し
- 8. F#パラメータの受け渡し
- 9. コントローラーデータの受け渡し
- 10. Cでの変数の受け渡し
- 11. Pythonでの3Dデータの受け渡し
- 12. プロセス間でのメッセージの受け渡し
- 13. クラス間でのSQLContextの受け渡し
- 14. イベントハンドラでのテキストボックス値の受け渡し
- 15. SASマクロでのパラメータの受け渡し
- 16. Swiftでの配列の受け渡し
- 17. Vueでのイベントメソッドの受け渡し
- 18. リストでのPYTHONパラメーターの受け渡し
- 19. メソッド間でのArrayListの受け渡し
- 20. アクティビティ間でのパスワードの受け渡し
- 21. サービス内でのコンテキストの受け渡し
- 22. form_validationでのパラメータの受け渡しCodeigniter
- 23. OnClickイベントでのJSONの受け渡し
- 24. GoLang - インターフェイスを受け入れる関数にnilを渡す
- 25. Collections.sort、Enum、Comparableインターフェイスの問題
- 26. OOP - C#でのメッセージ受け渡し
- 27. プロセス間でソケットの受け渡し
- 28. djangoテンプレートタグでの受け渡しリクエスト
- 29. Gradleのモジュール/サブプロジェクト間でAIDLインターフェイスを使用
- 30. aidl経由でビューインスタンスを渡す方法
チャーリー・コリンズのコメントをご覧ください。それは完全に真実です。できるだけenumを避けてください。 – Cristian
@クリスチャンは塩の穀物と一緒に取る必要があります。列挙型は良い設計です。アンドロイドが言語から列挙を削除しない理由があります。 –
それは本当の人です。しかし、私は彼らがそれを移動していないと思います。それは簡単ではないからです。彼らは依然としてバイトコードをデクシングする前に 'javac'を使います。とにかく...私はenumを愛し、物事をはっきりとエレガントにするときに使用します。 – Cristian