【发布时间】:2020-02-20 21:23:05
【问题描述】:
我现在遇到了一个知识问题,如果您能提供任何帮助,我将不胜感激。这是我的问题,我有多种功能:
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()
}
}
但是 IDE 不允许我这样做,因为返回类型不是泛型类型存在问题,我知道可以执行此类操作,但不知道如何操作。
你能帮我完成fun <T>吗?
【问题讨论】:
-
制作返回类型
Any? -
这能回答你的问题吗? A function with generic return type
-
出于任何原因,我都不建议这样做。重载是最清晰的解决方法,最好有编译时异常而不是运行时异常。
-
我可以做到
Any?,但它并不是那么干净 -
@Daniel 这确实是一个很好的理由,我正在考虑代码的清晰性并可能以更漂亮的方式进行重构,并没有考虑可能的崩溃
标签: kotlin