Michael Langford
10/19/2021, 9:30 PMDamian Zawadzki
10/19/2021, 10:38 PMsealed class Page {
abstract val identifier: UUID
abstract val time: LocalDateTime
abstract val lastUpdate: LocalDateTime?
data class Page1OrSomething(
val locationName: String, val color: Int,
override val identifier: UUID,
override val time: LocalDateTime,
override val lastUpdate: LocalDateTime?,
) : Page()
data class Page2OrSomething(
val activityType: String, val length: Int,
override val identifier: UUID,
override val time: LocalDateTime,
override val lastUpdate: LocalDateTime?,
) : Page()
}
Michael Langford
10/20/2021, 4:21 PMMichael Langford
10/20/2021, 4:26 PMsealed class Page {
abstract val identifier: UUID
abstract val time: LocalDateTime
abstract val lastUpdate: LocalDateTime
sealed class Page1OrSomethingI: Page() {
abstract override val identifier: UUID
abstract override val time: LocalDateTime
abstract override val lastUpdate: LocalDateTime
data class Page10RealBrSomething(
val activityType: String, val length: Int,
override val identifier: UUID,
override val time: LocalDateTime,
override val lastUpdate: LocalDateTime,
): Page1OrSomethingI()
data class Page10AnalyticsJammedInTable(
override val identifier: UUID,
override val time: LocalDateTime,
override val lastUpdate: LocalDateTime,
) : Page1OrSomethingI()
}
data class Page2OrSomething(
val activityType: String, val length: Int,
override val identifier: UUID,
override val time: LocalDateTime,
override val lastUpdate: LocalDateTime,
) : Page()
}
/// This also compiles, without apparent warnings
sealed class Page {
abstract val identifier: UUID
abstract val time: LocalDateTime
abstract val lastUpdate: LocalDateTime
sealed class Page1OrSomethingI: Page() {
// abstract override val identifier: UUID
// abstract override val time: LocalDateTime
// abstract override val lastUpdate: LocalDateTime
data class Page10RealBrSomething(
val activityType: String, val length: Int,
override val identifier: UUID,
override val time: LocalDateTime,
override val lastUpdate: LocalDateTime,
): Page1OrSomethingI()
data class Page10AnalyticsJammedInTable(
override val identifier: UUID,
override val time: LocalDateTime,
override val lastUpdate: LocalDateTime,
) : Page1OrSomethingI()
}
data class Page2OrSomething(
val activityType: String, val length: Int,
override val identifier: UUID,
override val time: LocalDateTime,
override val lastUpdate: LocalDateTime,
) : Page()
}
Michael Langford
10/20/2021, 4:26 PMDamian Zawadzki
10/20/2021, 5:53 PMealed class Page1OrSomethingI: Page() {
// abstract override val identifier: UUID
// abstract override val time: LocalDateTime
// abstract override val lastUpdate: LocalDateTime
data class Page10RealBrSomething(
val activityType: String, val length: Int,
override val identifier: UUID,
override val time: LocalDateTime,
override val lastUpdate: LocalDateTime,
): Page1OrSomethingI()
Because you are actuallly implementing those commented properties in Page10RealBrSomething and Page1OrSomething. Sealed class is like abstract class so you don't need too implement anything. Also sealed class cannot be directly instantiated.