gpt4 book ai didi

static - 是否可以不延迟初始化类的静态属性?

转载 作者:行者123 更新时间:2023-12-02 04:50:17 25 4
gpt4 key购买 nike

我正在努力实现的一个简短示例:

class Country {
final int id;
final String name;

static List<Country> values = new List<Country>();

static final Country US = new Country._create(1, 'United States');
static final Country UK = new Country._create(2, 'United Kingdom');

Country._create(this.id, this.name) {
values.add(this);
}
}

我有一个带有私有(private)命名构造函数的 Country 类。我想创建一组静态 Country 常量和所有可用国家的列表。

这就是问题所在:

void main() {
print('Countries:');
for (Country country in Country.values) {
print(country.name);
}
}

由于静态成员的延迟初始化我的 列表为空。然而:

void main() {

print('US id is: ${Country.US.id}');

print('Countries:');
for (Country country in Country.values) {
print(country.name);
}
}

仅当我在代码中引用它时,才会将 US 常量添加到列表中。

用国家/地区填充我的静态国家/地区列表而不一一添加它们的最简单方法是什么?

最佳答案

只需使用列表文字而不是在构造函数中添加它:

class Country {
final int id;
final String name;

static List<Country> values = <Country>[US, UK];

static const Country US = new Country._create(1, 'United States');
static const Country UK = new Country._create(2, 'United Kingdom');

Country._create(this.id, this.name);
}

这样你也可以使用 const提高效率

class Country {
final int id;
final String name;

static const List<Country> values = const <Country>[US, UK];

static const Country US = const Country._create(1, 'United States');
static const Country UK = const Country._create(2, 'United Kingdom');

const Country._create(this.id, this.name);
}

关于static - 是否可以不延迟初始化类的静态属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29349160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com