Перенаправляющий конструктор
Перенаправляющий конструктор - это конструктор, который
не выполняет инициализацию полей самостоятельно, а
перенаправляет вызов другому конструктору того же
класса. В теле такого конструктора не может быть
никакого кода, кроме вызова целевого конструктора
через ключевое слово this. Перенаправляющий
конструктор указывается после двоеточия с помощью
this и имени целевого конструктора. В
качестве параметров перенаправляющий конструктор
может принимать значения, которые затем передает
в целевой конструктор.
Синтаксис
ClassName.redirectingName(parameters) : this.targetName(arguments);
Пример
Давайте создадим класс Point с основным
конструктором и перенаправляющим именованным
конструктором Point.origin, который
делегирует создание объекта основному конструктору:
class Point
{
int x;
int y;
Point(this.x, this.y);
Point.origin() : this(0, 0);
}
void main()
{
Point p = Point.origin();
print('${p.x}, ${p.y}');
}
Результат выполнения кода:
"0, 0"
Пример
Перенаправляющий конструктор может принимать
параметры и передавать их в целевой конструктор.
Давайте создадим конструктор Point.square,
который принимает одно значение и передает его
дважды в основной конструктор:
class Point
{
int x;
int y;
Point(this.x, this.y);
Point.square(int value) : this(value, value);
}
void main()
{
Point p = Point.square(5);
print('${p.x}, ${p.y}');
}
Результат выполнения кода:
"5, 5"
Пример
Также перенаправляющий конструктор может ссылаться на другой именованный конструктор того же класса. Давайте создадим цепочку перенаправлений:
class Point
{
int x;
int y;
Point(this.x, this.y);
Point.origin() : this(0, 0);
Point.copy() : this.origin();
}
void main()
{
Point p = Point.copy();
print('${p.x}, ${p.y}');
}
Результат выполнения кода:
"0, 0"
Смотрите также
-
конструктор
named-constructor,
который создает именованный конструктор -
ключевое слово
this,
которое ссылается на текущий объект -
список инициализации
initializer-list,
который инициализирует поля перед телом конструктора -
фабричный конструктор
factory,
который может возвращать объект другого класса