Аннотация @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 выдаст ошибку, а попытка изменить значение приведёт к ошибке во время выполнения:
Результат выполнения кода:
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,
которая помечает устаревший код