Kotlin 具有不同返回类型的泛型类型函数
我现在遇到了一个知识问题,我非常感谢你能提供的任何帮助。这是我的问题,我有多种功能:Kotlin 具有不同返回类型的泛型类型函数,kotlin,Kotlin,我现在遇到了一个知识问题,我非常感谢你能提供的任何帮助。这是我的问题,我有多种功能: fun read(key: Key, defaultValue: String): String? { return prefs.getString(key.name, defaultValue) } fun read(key: Key, defaultValue: Boolean): Boolean? { return prefs.getBoolean
fun read(key: Key, defaultValue: String): String? {
return prefs.getString(key.name, defaultValue)
}
fun read(key: Key, defaultValue: Boolean): Boolean? {
return prefs.getBoolean(key.name, defaultValue)
}
fun read(key: Key, defaultValue: Int): Int {
return prefs.getInt(key.name, defaultValue)
}
我不想用不同的类型重载read
函数,而是希望使用如下内容:
fun<T> read(key: Key, defaultValue: T): T? {
return when(defaultValue){
is String -> prefs.getString(key.name, defaultValue)
is Boolean -> prefs.getBoolean(key.name, defaultValue)
else -> throw IllegalArgumentException()
}
}
fun read(key:key,defaultValue:T):T?{
返回时间(默认值){
is String->prefs.getString(key.name,defaultValue)
is Boolean->prefs.getBoolean(key.name,defaultValue)
else->抛出IllegalArgumentException()
}
}
但是IDE不允许我这样做,因为返回类型不是泛型类型存在问题,我知道可以这样做,但不知道如何做。
你能帮我找到
的乐趣吗?就我而言,重载是更好、更干净的方法,但是如果你死心塌地这样做,那么你可以使用未经检查的强制转换
fun<T> read(key: Key, defaultValue: T): T? {
return when(defaultValue){
is String -> prefs.getString(key.name, defaultValue) as T
is Boolean -> prefs.getBoolean(key.name, defaultValue) as T
else -> throw IllegalArgumentException()
}
}
fun read(key:key,defaultValue:T):T?{
返回时间(默认值){
是字符串->prefs.getString(key.name,defaultValue)作为T
是Boolean->prefs.getBoolean(key.name,defaultValue)作为T
else->抛出IllegalArgumentException()
}
}
将返回类型设置为任何?
这是否回答了您的问题?我不建议出于任何原因这样做。重载是最清晰的解决方法,最好使用编译时异常,而不是运行时异常。我可以将其设置为Any?
,但事实并非如此cleaner@Daniel这确实是一个很好的理由,我在考虑代码的清晰性,并可能以更漂亮的方式进行重构,并且没有考虑到可能的崩溃prefs.get*(..)
返回一个可为null的值,所以它应该是作为t?
我想我会按照@Daniel在我的帖子中的建议,使用重载而不是这个函数