【发布时间】:2019-10-29 22:03:09
【问题描述】:
我正在尝试在实践中使用 Kotlin 中的新 sealedSubclasses 功能。我需要从一个密封的类中处理一些子类的实例,但是我以前不知道哪个子类是,所以正常的过程是尝试所有的子类。
假设有 20 个或更多子类。
在下面,我对其进行了很多简化以使其易于理解。我只使用了 2 个带有标量内部类型的子类。在现实世界中可以是复杂的对象类型。
sealed class Person {
abstract var name:String
// ...
}
data class Doctor(
var license: String = "",
// ....
override var name:String = ""
) : Person()
// ....
data class Fireman (
var medals: Int=0,
// ....
override var name:String = ""
) : Person()
现在我需要克隆该结构:首先尝试:
var p:Person = Doctor("123","Louis")
var q:Person
// ...
Person.copy // it is forbidden
所以我需要这样做
var p:Person = Doctor("123","Louis")
var q:Person
when (p) {
is Doctor -> q = p.copy()
// ...
is Fireman -> q = p.copy()
}
注意这是错误的代码,因为我总是添加一个新的子类,我必须在克隆过程中手动添加,重复子块。
所以我尝试使用sealedSubclasses,但我没有将子类与类型连接以模拟前面的代码
for (Token::class.sealedSubclasses 中的子类) { if (ele::class.simpleName as String== derived.qualifiedName){ // ?????? } }
我能做什么?
【问题讨论】:
标签: kotlin