Как писать статические классы в dart?

#flutter #dart

#flutter #dart

Вопрос:

Я переношу JSON5 на dart и хочу сохранить исходное соглашение.

Исходный код static class JSON5 содержит 2 статических метода. Но dart не допускает статических классов.

Мой код dart:

 /// static class, do not instanciate or inherit this
class JSON5 {
  static String stringify(dynamic obj) { };
  static dynamic parse(String json5String) { };
}
  

Возможно ли остановить пользователей от 2 вещей?

  • создание экземпляра класса: var json5 = JSON5()
  • расширяет или реализует класс: class DerivedJSON5 extends JSON5 {}

Ответ №1:

Чтобы запретить создание экземпляра, вы можете добавить частный конструктор: JSON5._();

И для предотвращения наследования лучшее, что вы можете в настоящее время сделать в dart, — это добавить @sealed аннотацию из мета-пакета

Комментарии:

1. 1, JSON5._() скрывает конструктор по умолчанию 👍. Но @sealed все еще не работает, я безуспешно пытался запустить dartnalyzer lib . возможно, для этого нужен файл конфигурации. Спасибо.

2. Не уверен, почему это не работает, но я бы не стал слишком беспокоиться о возможности наследования от него, поскольку статические члены не могут быть унаследованы, поэтому он в основном ничего не делает