РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
53 of 723 menu

Аннотация @immutable

Аннотация @immutable помечает класс как неизменяемый. Это означает, что после создания объекта такого класса его поля нельзя изменять. Все поля класса должны быть объявлены через final. Если класс помечен этой аннотацией, анализатор Dart будет выдавать предупреждение при попытке объявить изменяемое поле или изменить значение поля после создания объекта. Аннотация импортируется из пакета package:meta/meta.dart.

Синтаксис

import 'package:meta/meta.dart'; @immutable class ClassName { final Type field; }

Пример

Давайте создадим неизменяемый класс Point с двумя полями и выведем их значения на экран:

import 'package:meta/meta.dart'; @immutable class Point { final int x; final int y; const Point(this.x, this.y); } void main() { Point p = Point(1, 2); print(p.x); print(p.y); }

Результат выполнения кода:

1 2

Пример

Давайте попробуем изменить поле неизменяемого класса. Анализатор Dart выдаст ошибку, а попытка изменить значение приведёт к ошибке во время выполнения:

<+dart+> import 'package:meta/meta.dart'; @immutable class Point { final int x; final int y; const Point(this.x, this.y); } void main() { Point p = Point(1, 2); p.x = 3; // error: cannot assign to final field print(p.x); } <-dart+>

Результат выполнения кода:

Error: Cannot assign to final field 'x'.

Пример

Давайте создадим неизменяемый класс с константным конструктором и сравним два одинаковых объекта через identical:

import 'package:meta/meta.dart'; @immutable class Point { final int x; final int y; const Point(this.x, this.y); } void main() { Point a = const Point(1, 2); Point b = const Point(1, 2); print(identical(a, b)); }

Результат выполнения кода:

true

Смотрите также

  • ключевое слово final,
    которое объявляет неизменяемое поле
  • ключевое слово const,
    которое создаёт константные значения
  • аннотация override,
    которая помечает переопределённые члены класса
  • аннотация deprecated,
    которая помечает устаревший код
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить