Компилятор говорит:
Запечатанный подкласс не имеет состояния и не имеет переопределенных равных, преобразовывает запечатанный подкласс в объект
Из этого вы можете сделать вывод, что если Например, SendReceive
имеет состояние , предупреждение будет go прочь. И действительно, если вы измените объявление на
class SendReceive(val i: Int) : CallState()
и тем самым добавите в класс состояние Int
, тогда предупреждение исчезнет.
Объяснение простое. Если между разными экземплярами SendReceive
нет разницы, зачем разрешать разные экземпляры? Если сделать его object
, он станет единичным, что имеет смысл делать, когда разные экземпляры ничем не отличаются.