なぜAndroidはもっとenumを使わないのですか?
質問
私はいくつかの理由から、自分のコードでC#とJavaの列挙型を使うのが本当に好きになり始めました。
- 整数、文字列、またはブール値フラグのセットよりもはるかに型安全です。
- より読みやすいコードになります。
- intや文字列よりもenumの方が不正な値を設定することが難しい。
- 変数やパラメータに許される値を容易に発見することができます。
- 私が読んだすべてのものは、C# とほとんどの JVM において、それらが整数と同じようにうまく機能することを示しています。
しかし、Android フレームワークには、さまざまなタイプのフラグを渡す必要がある多数のケースがありますが、どれも列挙型を使用していないようです。 その使用が有益であると思われる例をいくつか挙げます。
Toast.LENGTH_SHORT
/
Toast.LENGTH_LONG
そして
View.GONE
,
View.VISIBLE
など。
これはなぜでしょうか? enum は Dalvik の単純な整数値よりもパフォーマンスが悪いのでしょうか? 私が認識していない他の欠点があるのでしょうか?
どのように解決するのですか?
この回答は2011年3月現在では無効になっています。
EnumsはFroyo以降で使用できます - この回答によると( Android のパフォーマンスのヒントから「Ints しか必要ないところでは、Enum を避ける」が削除されたのはなぜですか? ) によると、Android VM チームのメンバーからの回答 (および 彼のブログ ).
前回の回答
Androidチームの公式な推奨は、避けられるときはいつでも列挙を避けることです。
列挙型は非常に便利ですが サイズや速度が重要な場合には、残念ながら と速度が問題になります。例えば、このように
public enum Shrubbery { GROUND, CRAWLING, HANGING }
は740バイトを と比較して、.dex ファイルに 3つの public static final ints を持つ同等のクラスと比較して、.dex ファイルに 40 バイトが追加されます。最初の使用時に クラスのイニシャライザは メソッドを呼び出します。 の列挙された値を表すオブジェクトに対してメソッドを呼び出します。各オブジェクト はそれ自身の静的フィールドを取得し フルセットが配列に格納されます ("$VALUES" と呼ばれる静的フィールド)。 という静的フィールド)に格納されます。これは という静的フィールドに格納されます。 のためだけです。さらに、これ。
Shrubbery shrub = Shrubbery.GROUND;
は静的フィールドの検索を行います。もし GROUND"が静的なfinal intであったなら コンパイラはそれを既知の定数として扱い 定数として扱い、それをインライン化します。
ソースは 整数値しか必要としない列挙型を避ける
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] EclipseのAndroidプラグインで "Debug certificate expired "エラーが発生する。
-
[解決済み] enumとは何か、なぜ有用なのか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] Androidでマイナスマージンを使用するのは悪いことですか?
-
[解決済み] これはどういうことですか?失敗 [INSTALL_FAILED_CONTAINER_ERROR]?
-
[解決済み] データベースでリサイクルビューを使用する
-
[解決済み] ArrayList<MyCustomClass>をJSONArrayに変換する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Androidのパフォーマンスに関するヒントから「Intsしか必要ないEnumは避ける」が削除された理由とは?
-
[解決済み] Android Webview - キャッシュを完全に削除する
-
[解決済み] アンドロイドアプリのユーザーデータを消去する
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] APKが署名済みかデバッグビルドかを確認するには?
-
[解決済み] AndroidでTextViewの下にアンダーラインを引くには
-
[解決済み] フラグメント間の値の受け渡し方法
-
[解決済み] PendingIntentの "requestCode "は何に使うのですか?
-
[解決済み] 実行に失敗しました app:processDebugResources Android Studio
-
[解決済み] HttpURLConnectionを使ったPOSTによるファイル送信