Як щодо випадку, коли ви хочете мати більше одного конструктора. Наприклад, є 2 конструктори, які ви бажаєте використовувати:
Customer(String name, int age, String location) {
this.name = name;
this.age = age;
this.location = location;
}
Customer(this.name, this.age) {
this.name = name;
this.age = age;
}
Але якщо ви визначите їх обох у класі, буде помилка компілятора.
Dart пропонує конструктор Named, який допоможе вам реалізувати кілька конструкторів з більшою чіткістю:
class Customer {
Customer(String name, int age, String location) {
this.name = name;
this.age = age;
this.location = location;
}
Customer.withoutLocation(this.name, this.age) {
this.name = name;
this.age = age;
}
Customer.empty() {
name = "";
age = 0;
location = "";
}
@override
String toString() {
return "Customer [name=${this.name},age=${this.age},location=${this.location}]";
}
}
Ви можете написати це простіше із синтаксичним цукром:
Customer(this.name, this.age, this.location);
Customer.withoutLocation(this.name, this.age);
Customer.empty() {
name = "";
age = 0;
location = "";
}
Тепер ми можемо створити новий Customer
об’єкт цими методами.
var customer = Customer("bezkoder", 26, "US");
print(customer);
var customer1 = Customer.withoutLocation("zkoder", 26);
print(customer1);
var customer2 = Customer.empty();
print(customer2);
Отже, чи є спосіб зробити Customer.empty()
охайним? І як ініціалізувати порожнє значення поля розташування при виклику Customer.withoutLocation()
замість null
?
Від: Кілька конструкторів
color
іname
, а неgetColor()
іgetName()
методів. Якщо значення ніколи не змінюються, ви можете використовувати одне загальнодоступне поле, наприкладclass Player { final String name; final int color; Player(this.name, this.color); }
.