Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在运行时更改实现_Android_Kotlin - Fatal编程技术网

Android 如何在运行时更改实现

Android 如何在运行时更改实现,android,kotlin,Android,Kotlin,我需要从客户端代码调用一些类。现在我有一个列表,然后客户机必须检查该列表的实现。使用起来很乱 object Adapter { val list = listOf( A(), B() ... ) } 理想情况下,我只在内存中保留一个实现,但有时我需要在实现之间进行更改。让所有类实现一个接口。因为它们都实现了相同的接口,所以您可以将具体实例分配给相同的变量 interface IWorker { fun doWork()

我需要从客户端代码调用一些类。现在我有一个列表,然后客户机必须检查该列表的实现。使用起来很乱

object Adapter {
    val list = listOf(
        A(),
        B()
        ...
    )
}

理想情况下,我只在内存中保留一个实现,但有时我需要在实现之间进行更改。

让所有类实现一个接口。因为它们都实现了相同的接口,所以您可以将具体实例分配给相同的变量

 interface IWorker {
     fun doWork()
 }
然后在适配器类中,您可以设置要使用的实现

object Adapter {
    var worker: IWorker = Default()
}
默认值表示您的任何类

class Default: IWorker {
    override fun doWork() {}
}

worker
需要是一个
var
(不是
val
),为什么不简单:
对象适配器{var-worker:IWorker=Default()}
哪个更像“Kotlin-ish”?你能更改这些类吗?或者它们是来自一些外部API吗?它们不是,但这是个好问题。