kotlin - Kotlin 中的运行时多态性
问题描述
在这种情况下,有什么优雅的方法可以应用多态性吗?解析器在运行时提供以下类:
class io.swagger.v3.oas.models.media.Schema //is parent of the rest :
class io.swagger.v3.oas.models.media.ComposedSchema
class io.swagger.v3.oas.models.media.ArraySchema
class io.swagger.v3.oas.models.media.StringSchema
class io.swagger.v3.oas.models.media.ObjectSchema
我希望每个类都具有相同的名称和简单、简短的方法,该方法将在运行时强制转换和调用必要的函数。这实际上正在发生,但我希望有更简短的解决方案,而无需制作这种重复:
fun main() {
val parser = OpenAPIV3Parser()
val asList = listOf(pathYaml3, pathYml2)
val map = asList.map(parser::read)
.flatMap { it.components.schemas.values }
.forEach(::parseRawSchema)
}
fun parseRawSchema(schema: Schema<Any>) {
if (schema is ComposedSchema) {
parseSchema(schema)
}
if (schema is StringSchema) {
parseSchema(schema)
}
...
}
fun parseSchema(schema: ComposedSchema) {
println("Compose-schema")
}
fun parseSchema(schema: StringSchema) {
println("Sting-schema")
}
...
解决方案
尝试使用扩展名。例如:
fun ComposedSchema.parseSchema() {
println("Compose-schema")
}
fun StringSchema.parseSchema() {
println("Sting-schema")
}
然后:
fun parseRawSchema(schema: Schema<Any>) {
schema.parseSchema()
}
推荐阅读
- python - Sklearn ROC AUC 分数:ValueError:y 应该是一维数组,得到一个形状为 (15, 2) 的数组
- javascript - 输入时标题中的顶部导航项不断闪烁
- javascript - Javascript 到 JSON 拼接位置
- python - 如何使用 python 在一个条形图上绘制来自两个数据集的天气数据?
- python - 为什么结果不是 00:00:XX?
- reactjs - 以这种方式使用 useState 和 UseEffect 使滑块第一次但随后工作
- python - PyObject 中的可变对象,它们的价值是什么?
- javascript - 我的 png 文件没有显示,我在 django 中的网站
- php - Yii2 类 'url' 未找到
- python - AttributeError:“numpy.int64”对象没有属性“_get_object_id”