为什么编译器建议将 sealed sub-class 转换为对象?
Why the compiler suggest convert sealed sub-class to object?
我不明白为什么编译器建议我将带有子 class 的密封 class 转换为对象,让我们看一个例子:
sealed class CallState
class SendReceive : CallState()
class SendOnly:CallState()
至此
sealed class CallState
object SendReceive : CallState()
object SendOnly:CallState()
好像是在阻止我创建非状态对象,但我不知道编译器是什么意思。
感谢您的帮助。
sealed classes 类似于 java 中的枚举,但它允许保持状态。
如果子class不保持状态,它可以只是一个对象。
SendReceive 是对象,但 SenOnly 将是 class。
sealed class CallState {
object SendReceive : CallState()
class SendOnly(var totalReceiver:Int) : CallState()
}
编译器说
Sealed sub-class has no state and no overridden equals, convert
sealed sub-class to object
从这里你可以推断出,如果SendReceive
had 状态,警告会消失。实际上,如果您将声明更改为
class SendReceive(val i: Int) : CallState()
并因此向 class 添加一个 Int
状态,然后警告消失。
解释很简单。如果 SendReceive
的不同实例之间没有区别,为什么允许不同的实例?使其成为 object
使其成为单实例,当不同的实例在任何方面都没有不同时,这非常有意义。
我不明白为什么编译器建议我将带有子 class 的密封 class 转换为对象,让我们看一个例子:
sealed class CallState
class SendReceive : CallState()
class SendOnly:CallState()
至此
sealed class CallState
object SendReceive : CallState()
object SendOnly:CallState()
好像是在阻止我创建非状态对象,但我不知道编译器是什么意思。
感谢您的帮助。
sealed classes 类似于 java 中的枚举,但它允许保持状态。 如果子class不保持状态,它可以只是一个对象。
SendReceive 是对象,但 SenOnly 将是 class。
sealed class CallState {
object SendReceive : CallState()
class SendOnly(var totalReceiver:Int) : CallState()
}
编译器说
Sealed sub-class has no state and no overridden equals, convert sealed sub-class to object
从这里你可以推断出,如果SendReceive
had 状态,警告会消失。实际上,如果您将声明更改为
class SendReceive(val i: Int) : CallState()
并因此向 class 添加一个 Int
状态,然后警告消失。
解释很简单。如果 SendReceive
的不同实例之间没有区别,为什么允许不同的实例?使其成为 object
使其成为单实例,当不同的实例在任何方面都没有不同时,这非常有意义。