我有类似的东西:
interface Options {
fun load(conf: JsonObject)
}
object BasicOptions : Options { }
object PersonOptions : Options { }
object CarOptions : Options { }
Run Code Online (Sandbox Code Playgroud)
然后我想获取所有Objects实现 Optionsinterface并调用 load 的内容forEach。
fun main(args: Array) {
configFuture.whenComplete { config ->
options.forEach { it.load(config) }
}
}
Run Code Online (Sandbox Code Playgroud)
该语言不支持这一点,这就是为什么有依赖注入、注册表或服务查找解决方案。
另一种方法是使用自定义类加载器并添加此自定义功能。最简单的方法可能是使用Reflections库来扫描和加载这些类。例如:
val reflections = Reflections("my.project.prefix")
val allClasses = reflections.getSubTypesOf(Options::class.java)
Run Code Online (Sandbox Code Playgroud)最简单、最常用的解决方案就是简单地维护您自己的“注册表”,例如保存所有实例列表的静态对象。它将需要手动添加任何实现该接口的新类 - 但这将是简单、高性能且健壮的解决方案。
| 归档时间: |
|
| 查看次数: |
4949 次 |
| 最近记录: |