用dart写出setter和getter赋值分别使用三种方法定义3个泛型map:key为string型,value为int型。分别赋值两个key,分别为长、宽,value值自己确定。在每个泛型map中增加两个key,一个是面积,一个是周长,对应的值根据长宽进行计算得出。
时间: 2024-02-23 16:03:33 浏览: 21
好的,下面是用Dart编写的setter和getter方法来定义泛型Map的示例代码:
```dart
class Rectangle<T extends num> {
late T _length;
late T _width;
T get length => _length;
set length(T value) {
_length = value;
}
T get width => _width;
set width(T value) {
_width = value;
}
Map<String, T> get areaMap {
final area = _length * _width;
return {'area': area};
}
Map<String, T> get perimeterMap {
final perimeter = (_length + _width) * 2;
return {'perimeter': perimeter};
}
}
void main() {
final rectangleInt = Rectangle<int>();
rectangleInt.length = 5;
rectangleInt.width = 6;
final rectangleDouble = Rectangle<double>();
rectangleDouble.length = 5.5;
rectangleDouble.width = 6.6;
final map1 = <String, int>{};
map1['length'] = rectangleInt.length;
map1['width'] = rectangleInt.width;
map1.addAll(rectangleInt.areaMap);
map1.addAll(rectangleInt.perimeterMap);
final map2 = <String, double>{};
map2['length'] = rectangleDouble.length;
map2['width'] = rectangleDouble.width;
map2.addAll(rectangleDouble.areaMap);
map2.addAll(rectangleDouble.perimeterMap);
print(map1); // {length: 5, width: 6, area: 30, perimeter: 22}
print(map2); // {length: 5.5, width: 6.6, area: 36.3, perimeter: 24.2}
}
```
在上述示例代码中,我们定义了一个名为`Rectangle`的泛型类,它有两个类型参数:`T`和`U`,均为`num`类型或其子类。我们使用`_length`和`_width`成员变量来存储长和宽,然后定义了`length`和`width`的getter和setter方法来访问和设置这两个变量的值。
接下来,我们定义了两个返回Map的getter方法:`areaMap`和`perimeterMap`。这些方法根据长和宽计算出面积和周长,并返回一个包含相应键值对的Map。
最后,我们使用`main`函数来展示如何使用`Rectangle`类的实例来创建包含所需键值对的Map。我们创建了两个实例:一个使用`int`类型的`Rectangle`,另一个使用`double`类型的`Rectangle`。我们将这些值存储在两个不同类型的泛型Map中,并输出结果。
需要注意的是,`Rectangle`类的类型参数`T`必须是`num`类型或其子类,因为我们使用了`num`类型的方法来计算面积和周长。