Generics Kotlin-同一类,不同的内部类
我有科特林的目标Generics Kotlin-同一类,不同的内部类,generics,kotlin,Generics,Kotlin,我有科特林的目标 object LocalizationHelper { var lang: String = "" get() = MyApi.getCurrentLanguage() fun initLanguage() { val preferredLanguage = Locale.getDefault().language.toLowerCase() lang = if (MyApi.setSupportedLangu
object LocalizationHelper {
var lang: String = ""
get() = MyApi.getCurrentLanguage()
fun initLanguage() {
val preferredLanguage = Locale.getDefault().language.toLowerCase()
lang = if (MyApi.setSupportedLanguage(preferredLanguage)) preferredLanguage else "en"
}
//bunch of other methods
}
有没有一种方法,如何拥有相同的类,但是使用MyApi2
而不使用整个LocalizationHelper
的重复代码
原因是我在带有MyApi
的主应用程序中使用了这个helper类,对于widget,我需要简化的MyApi2
。然而,90%的时间里,我都会将它与MyApi
一起使用
我想,像“代码”>“t>代码”之类的泛型对象默认为
您可以提取对象本地化帮助器{
var lang:String=“”
get()=T.getCurrentLanguage()
有趣的语言(){
val preferredLanguage=Locale.getDefault().language.toLowerCase()
lang=if(T.setSupportedLanguage(preferredLanguage))preferredLanguage else“en”
}
//其他方法
}
和MyApi
的接口:MyApi2
interface Api {
fun getCurrentLanguage(): String
fun setSupportedLanguage(language: String): Boolean
}
object MyApi : Api {
override fun getCurrentLanguage() = "en"
override fun setSupportedLanguage(language: String) = true
}
object MyApi2 : Api {
override fun getCurrentLanguage() = "de"
override fun setSupportedLanguage(language: String) = true
}
然后,您可以将LocalizationHelper
的常见行为移动到抽象父级:
abstract class LocalizationHelperAbstract(private val api: Api) {
var lang: String = ""
get() = api.getCurrentLanguage()
fun initLanguage() {
val preferredLanguage = Locale.getDefault().language.toLowerCase()
lang = if (api.setSupportedLanguage(preferredLanguage)) preferredLanguage else "en"
}
//bunch of other methods
}
并使用适当的api安装对象:
object LocalizationHelper : LocalizationHelperAbstract(MyApi)
object LocalizationHelper2 : LocalizationHelperAbstract(MyApi2)
object LocalizationHelper : LocalizationHelperAbstract(MyApi)
object LocalizationHelper2 : LocalizationHelperAbstract(MyApi2)