I don't understand why the compiler suggests me to convert a sealed class with the subclasses, to objects, let see an example:
sealed class CallState
class SendReceive : CallState()
class SendOnly:CallState()
to this
sealed class CallState
object SendReceive : CallState()
object SendOnly:CallState()
Seems like it is preventing me from creating a not state object, but I don't know what the compiler means.
Thanks for your help.
The compiler says
Sealed sub-class has no state and no overridden equals, convert sealed sub-class to object
From this you can deduce that if e.g. SendReceive had state, the warning would go away. And indeed, if you change the declaration to
class SendReceive(val i: Int) : CallState()
and thus add an Int state to the class, then the warning goes away.
The explanation is simple. If there is no difference between different instances of SendReceive, why allow different instances? Making it an object makes it single-instance, which makes perfect sense to do when different instances are not different in any way.
sealed classes are similar to enum in java but it allows to keep state. if a subclass doesn’t keep state, it can just be an object.
SendReceive is object but SenOnly will be class.
sealed class CallState {
object SendReceive : CallState()
class SendOnly(var totalReceiver:Int) : CallState()
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With