我正在研究使用密封类来表示一组有限的可能值。
这是代码生成项目的一部分,该项目将编写大量此类类,每个类都有很多案例。因此,我担心应用程序的大小。由于很可能几个案例可以具有相同的属性,我正在考虑使用包装器,例如:
data class Foo(val title: String, ...lot of other attributes)
data class Bar(val id: Int, ...lot of other attributes)
sealed class ContentType {
class Case1(val value: Foo) : ContentType()
class Case2(val value: Bar) : ContentType()
// try to reduce app size by reusing the existing type,
// while preserving the semantic of a different case
class Case3(val value: Bar) : ContentType()
}
fun main() {
val content: ContentType = ContentType.Case1(Foo("hello"))
when(content) {
is ContentType.Case1 -> println(content.value.title)
is ContentType.Case2 -> println(content.value.id)
is ContentType.Case3 -> println(content.value.id)
}
}
这是我应该如何解决这个问题吗?
如果是这样,我怎样才能最好地从密封类访问关联值的属性?以便
is ContentType.Case2 -> println(content.value.id)
变成
is ContentType.Case2 -> println(content.id)