は、私はこのようなSharedPreferencesから値を取得するための簡単なヘルパー機能を持つクラスを使用します。Kotlin - reified型パラメータとして 'T'を使用できません。代わりに
私はクラス型の切り換え持つように具体化タイプのパラメータを使用していると、それはオペレータの関数であるので、私はあるべきoperator inline fun <reified T : Any> SharedPreferences.get(key: String, defaultValue: T? = null): T? {
return when (T::class) {
String::class -> getString(key, defaultValue as? String) as T?
Int::class -> getInt(key, defaultValue as? Int ?: -1) as T?
Boolean::class -> getBoolean(key, defaultValue as? Boolean ?: false) as T?
Float::class -> getFloat(key, defaultValue as? Float ?: -1f) as T?
Long::class -> getLong(key, defaultValue as? Long ?: -1) as T?
else -> throw UnsupportedOperationException("Not yet implemented")
}
}
以下のような角括弧構文で呼び出すことができ:
val name: String? = prefs[Constants.PREF_NAME]
しかし、私はそれを呼び出すたびに、UnsupportedOperationExceptionが関数がクラス型を取得することができないかを示すスローされます。私は、デバッガをアタッチし、T::class
を評価するとき
、私の機能と間違って何"Cannot use 'T' as reified type parameter. Use a class instead."
私にエラーを与えていますか?私は間違いをキャッチできませんでした。誰も助けることができますか?
編集:クラス全体がhereとthis is whereです。エラーが発生します。
更新:これはKotlinコンパイラの問題です。 トラックhttps://youtrack.jetbrains.com/issue/KT-17748および https://youtrack.jetbrains.com/issue/KT-17748を更新してください。
私はあなたのエラーを再現することはできません。私が気づくことの1つは、 'when'の結果を返さないということです。常にnullを返します。 –
@JornVerneeあなたはこれを見てください:https://gist.github.com/krupalshah/782c42c70f2c58004c9bbda6291315e6私はあなたの助けが必要です。 –
エラーを再現できない場合はお手伝いできません。 –