嵌套类是在Kotlin中建模标识关系的好方法吗?
要求:
- 一个问题不能没有一个系列
- 撤销不可能没有问题
- 一个肯定不能没有撤销
看起来相当冗长:
class Have {
inner class Serno(val value: String) {
override fun toString(): String = "serno: $value"
fun nothing () = this@Have
inner class Issue(val value: String) {
override fun toString(): String = "issue: $value (${serno()})"
fun serno () = this@Serno
inner class Revocation(val value: String) {
override fun toString(): String = "revocation: $value (${issue()})"
fun issue () = this@Issue
inner class Affirmation(val value: String) {
override fun toString(): String = "affirmation: $value (${revocation()})"
fun revocation () = this@Revocation
}
}
}
}
}
val serno: Have.Serno = Have().Serno("123")
val issue: Have.Serno.Issue = serno.Issue("SUP-1")
val revocation: Have.Serno.Issue.Revocation = issue.Revocation("2020")
val affirmation: Have.Serno.Issue.Revocation.Affirmation = revocation.Affirmation("2022")
println(serno)
println(issue)
println(revocation)
println(affirmation)
println(serno == affirmation.revocation().issue().serno())
有没有更简单的方法来实现同样的目标?
1条答案
按热度按时间zkure5ic1#
这通常可以通过简单的非空属性来实现:
如果对
toString
不严格,甚至可以使用内置的toString
数据类,进一步简化: