kotlin - 访问密封子类上的抽象属性集(在 kotlin 中)
问题描述
我遇到了一种情况,我有一个必须在密封类的每个子类上定义的公共属性。我希望能够访问这些值的集合/列表而无需“复制”列表(通过硬编码)希望下面的代码传达我的意思
sealed class S {
companion object {
// want to avoid typing: listOf("these", "values", please")
// instead grab it from the classes themselves
val properties = S::class.sealedSubclasses.map { /* What to do here? */ }
}
abstract val property: String
}
class A(val d: String) : S() {
override val property: String = "these"
}
class B(val e: String) : S() {
override val property: String = "values"
}
class C(val f: String) : S() {
override val property: String = "please"
}
我fun <T : Any> KClass<T>.createInstance(): T
从 kotlin.reflect.full 了解到,但我的构造函数有非可选参数。
解决方案
您可以为此创建一个createInstance(vararg)
扩展函数:
fun <T : Any> KClass<T>.createInstance(vararg args: Any): T =
java.constructors.first().newInstance(*args) as T
S::class.sealedSubclasses.map { it.createInstance("the string") }
推荐阅读
- mongodb - 使用所有集合的 mongodump 进行 MongoDB 增量备份
- angular - 如何从投影内容中获取父组件?
- r - 将数据框中的值与其他列中的其他出现匹配
- javascript - 在javascript字符串中连接laravel刀片变量
- aws-glue-spark - 使用 AWS Glue 在 AWS S3 中动态创建文件夹
- react-native - 如何为 ReactNative SectionList 项目可见性添加偏移量
- mysql - Flutter/Dart 仅提取日期和时间?
- ansible - Ansible-我如何从剧本中的块中传递 Jinja2 模板中的所有变量
- arrays - realloc 堆栈分配的字符 (*)[n]
- css - 如何水平对齐两个