如何为带命名参数构造函数的Dart类添加getter方法?
为Dart类字段添加自定义Getter方法
首先说下你之前尝试的写法哪里出问题了:你把字段改成私有_someValue后,构造函数里却还是写了{this.someValue},这会让Dart误以为你要初始化一个名为someValue的公共字段,但你的类里根本没有这个字段,只有_someValue,自然会报错。
下面是两种正确的实现方式,你可以根据需求选择:
方式一:显式绑定构造参数到私有字段
这种方式能保持外部调用构造函数的参数名不变(依然是someValue:),内部用私有字段存储原始值,通过getter返回处理后的结果:
class TestClass { // 私有字段存储原始值 final int _someValue; // 构造函数接收命名参数,显式初始化私有字段 TestClass({int someValue}) : _someValue = someValue; // 自定义getter,返回加工后的值 int get someValue => _someValue + 2; }
方式二:带默认值的简化写法
如果需要给构造参数设置默认值,比如默认值为0,可以这样写:
class TestClass { final int _someValue; // 给构造参数设置默认值,再绑定到私有字段 TestClass({int someValue = 0}) : _someValue = someValue; int get someValue => _someValue + 2; }
测试调用示例
调用方式和你原来的代码几乎一致,只是getter会返回加工后的值:
void someMethod() { TestClass testClass = TestClass(someValue: 10); print(testClass.someValue); // 输出12,因为getter里给原始值加了2 }
补充一句:如果你的getter不需要加工值,只是单纯暴露字段,Dart的final字段默认自带隐式getter,不需要额外编写。只有当你需要对返回值做处理时,才需要用「私有字段+自定义getter」的组合。
内容的提问来源于stack exchange,提问作者Marcelo Glasberg
相关产品推荐
相关产品推荐

