dic*_*nus 3 kotlin sealed-class
我不明白为什么编译器建议我将带有子类的密封类转换为对象,让我们看一个例子:
sealed class CallState
class SendReceive : CallState()
class SendOnly:CallState()
Run Code Online (Sandbox Code Playgroud)
对此
sealed class CallState
object SendReceive : CallState()
object SendOnly:CallState()
Run Code Online (Sandbox Code Playgroud)
似乎它阻止我创建一个非状态对象,但我不知道编译器是什么意思。
谢谢你的帮助。
编译器说
密封子类没有状态也没有被覆盖的equals,将密封子类转换为对象
由此您可以推断出,如果例如SendReceive 有状态,警告就会消失。事实上,如果你将声明更改为
class SendReceive(val i: Int) : CallState()
Run Code Online (Sandbox Code Playgroud)
并因此Int向类添加一个状态,然后警告消失。
解释很简单。如果 的不同实例之间没有区别SendReceive,为什么允许不同的实例?使它成为一个object使得单实例,这是非常合情合理的,当不同的情况下,不以任何方式不同的事情。
| 归档时间: |
|
| 查看次数: |
639 次 |
| 最近记录: |