[解決済み] 逆引きでKotlinのEnumを効率的に使う?
2022-06-13 20:50:59
質問
Kotlinでenumの'逆引き'をするのに最適な方法を見つけようとしています。Effective Javaから私が学んだことの1つは、逆引きを処理するためにenum内に静的マップを導入することでした。これを単純なenumでKotlinに移植すると、次のようなコードになります。
enum class Type(val value: Int) {
A(1),
B(2),
C(3);
companion object {
val map: MutableMap<Int, Type> = HashMap()
init {
for (i in Type.values()) {
map[i.value] = i
}
}
fun fromInt(type: Int?): Type? {
return map[type]
}
}
}
私の質問は、これが最良の方法なのか、それとももっと良い方法があるのか、ということです。同じようなパターンに従ういくつかの列挙型がある場合はどうでしょうか?このコードを複数の列挙型でより再利用可能にする方法は Kotlin にあるでしょうか?
どのように解決するのですか?
まず、引数の
fromInt()
は
Int
ではなく
Int?
. を取得しようとすると
Type
を取得しようとすると、明らかに null が返されます。そのため
Map
はミュータブルである理由もありません。このコードは以下のようになります。
companion object {
private val map = Type.values().associateBy(Type::value)
fun fromInt(type: Int) = map[type]
}
このコードはとても短いので、率直に言って、再利用可能な解決策を見つけようとする価値があるかどうかわかりません。
関連
-
[解決済み] 式は、算術式またはスコープされていない enum 型でなければなりません。
-
[解決済み] Kotlin 三項条件演算子
-
[解決済み] Goでenumを表現する慣用的な方法は何ですか?
-
[解決済み] 列挙型をサブクラス化して、新しい要素を追加することはできますか?
-
[解決済み] enumとは何か、なぜ有用なのか?
-
[解決済み] enumの項目名を取得する方法は?
-
[解決済み】KotlinでJavaの静的メソッドに相当するものは何ですか?
-
[解決済み] Dart enumの "値 "を取得する方法
-
[解決済み] TypeScriptでenumのような型を作成する方法は?
-
[解決済み] 逆引きでKotlinのEnumを効率的に使う?
最新
-
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 実装 サイバーパンク風ボタン