首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么setter的'this._obj['a']=2‘在Dart类中不起作用

在Dart类中,setter的'this._obj['a']=2'不起作用的原因是,Dart语言中的setter方法只能用于修改类的成员变量,而不能直接修改类的属性。

在Dart中,类的成员变量通常使用私有变量的方式进行定义,即在变量名前加上下划线(_),例如'_obj'。私有变量只能在类内部访问,无法直接从类外部进行修改。为了实现对私有变量的修改,Dart提供了setter方法。

然而,setter方法只能用于修改类的成员变量,而不是直接修改类的属性。在给定的例子中,尝试使用setter方法修改'this._obj['a']',实际上是在尝试修改私有变量'_obj'的属性'a',这是不被允许的。

为了解决这个问题,可以通过定义一个公有的getter方法和setter方法来间接修改私有变量的属性。例如,可以定义一个名为'getObj'的getter方法来获取私有变量'_obj'的值,再定义一个名为'setObj'的setter方法来修改'_obj'的值。具体代码如下:

代码语言:txt
复制
class MyClass {
  Map<String, dynamic> _obj = {};

  Map<String, dynamic> get getObj => _obj;

  set setObj(Map<String, dynamic> newObj) {
    _obj = newObj;
  }
}

通过这种方式,可以通过调用'setObj'方法来修改'_obj'的值,例如:

代码语言:txt
复制
MyClass myClass = MyClass();
myClass.setObj = {'a': 2};

这样就可以成功修改私有变量'_obj'的属性'a'为2了。

需要注意的是,这里的示例代码仅仅是为了解释为什么'this._obj['a']=2'在Dart类中不起作用,并不是一个完整的实际应用场景。实际应用中,根据具体需求,可能会有更好的方式来实现类的属性修改。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python2为什么进行定义时最好

,不继承object对象,只拥有了doc , module 和 自己定义name变量, 也就是说这个命名空间只有三个对象可以操作....Animal继承了object对象,拥有了好多可操作对象,这些都是高级特性。...对于不太了解python同学来说,这些高级特性基本上没用处,但是对于那些要着手写框架或者写大型项目的高手来说,这些特性就比较有用了,比如说tornado里面的异常捕获时就有用到class来定位名称...,还有高度灵活传参数时候用到dict来完成....最后需要说清楚一点, 本文是基于python 2.7.10版本,实际上python 3 已经默认就帮你加载了object了(即便你没有写上object)。

1.2K20

Dart语言指南(二) 顶

冒号 (:)之后,构造函数体(如果有的话)之前指定超构造函数. 下面的例子,Employee构造函数调用了其父Person命名构造函数....更多信息查看Dart语言规范. 向添加功能:mixins Mixins是多个层次结构重用代码一种方式. 要使用mixin,请使用with 关键字后跟一个或多个mixin名称。...dart2js 还不支持这些 “super mixins” , 并且Dart分析器需要 --supermixin 标志. 更多信息查看 文章 Mixins in Dart....为什么要用泛型? 因为Dart类型是可选,所以您不必使用泛型 ....连续行上使用 /// 与多行文档注释具有相同效果. 文档注释Dart编译器忽略所有文本,除非它包含在括号。 使用括号,可以参考,方法,字段,顶级变量,函数和参数。

3K20

OC代码规范2——头文件尽量少引入其他头文件

不同点: 1,#include是C语言,当多个文件包含同一个文件时,需要使用条件编译语句控制重复包含问题,否则就很容易出现递归包含; 2,#import是OC对#include改进版本,#import...声明文件(.h文件),一般只需要知道被引用名称就可以了,不需要知道其具体实现,所以.h文件中一般使用@class来声明这个名称是名称;而在实现文件里面,因为会用到这个引用内部实体变量和方法...解决该问题方案就是:.h文件中使用@class来声明引用,然后.m文件再使用#import来导入引用。...所以,头文件是用#import导入引入,会导致如下两个问题: 1,可能会引入许多根本用不到内容,增加编译时间; 2,容易引起循环导入,进而导致编译错误。...因此,我们头文件少使用import引入其他头文件,而是使用@class来声明一个。 以上。

2.6K20

熟悉OC--2头文件尽量少引入其他头文件

OC标准方式 #import @interface Person : NSObject @property (nonatomic,copy) NSString...property (nonatomic,copy) NSString *lastName; @end #import "Person.h" @implementation Person @end 利用@Class头文件可以减少编译时间...当我们实际工作,可能需要创建一个名为Student,然后Person应该有一个Student属性,一般做法是引入Person.h文件引入Student.h #import <Foundation...假设要是把Student.h引入到Person.h,那么就会引入Student.h所有文件,有很多根本用不到内容,反而增加了编译时间 有时候必须在头文件引入其他头文件 如果你写, 集成某个..., 则必须引入定义那个父头文件,或者是你声明遵从某个协议, 那么该协议必须有完整定义, 而且不能用向前声明, 向前声明只能告诉编译器有某个协议, 而此时编译器却需要知道该协议定义方法 参考

15410

起飞了!Git新开源高星《Flutter跨平台开发入门与实战笔记》安卓高阶必备

《Flutter跨平台开发入门与实战笔记》 笔记目录: 为什么Flutter是跨平台开发终极之选 Windows上搭建Flutter开发环境 编写您第一个 Flutter App Flutter...(五) Dart语法篇之面向对象继承和Mixins(六) Dart语法篇之类型系统与泛型(七) Flutterwidget 注:鉴于目前网上还没有比较规范、系统整理,该学习手册内容都是根据笔者一个框架在网上进行搜集整理...关系图 Iterable方法图 forEach 介绍 使用方式 源码解析 map any every …… 第八章 Dart语法篇之函数使用(四) 函数参数 匿名函数(闭包,lambda) 箭头函数...局部函数 顶层函数和静态函数 main函数 …… 第九章 Dart语法篇之面向对象基础(五) 属性访问器(accessor)函数setter和getter 面向对象变量 构造函数 抽象方法、抽象和接口...函数 …… 第十章 Dart语法篇之面向对象继承和Mixins(六) 单继承 基于Mixins多继承 …… 第十一章 Dart语法篇之类型系统与泛型(七) 可选类型 接口类型 泛型 类型具体化

1.4K10

Dart语言进阶语法(二)

如果是私有的成员,不希望外面访问,只需要在成员变量之前加上一个下划线_变为私有即可。 以上代码,Dart还有一种简化写法,可以自动构造方法对成员变量初始化。...Getters 和 Setters方法 Java,一般不会直接在外部去访问成员,通常使用setter和getter方法来操作成员变量。...而在Dart语言中,所有中都包含隐式getter方法,对于非final修饰成员,还包含隐式setter方法。这就意味着,Dart,你可以直接在外部通过.操作符访问成员。...它适合用来初始化 final修饰变量 初始化列表调用是构造方法之前,也就是完成实例化之前,因此初始化列表是不能访问 this 运算符重载 这个特性,又很类似于C++运算符重载,Java...而Dart抽象,实际上就相当于Java接口。

1.6K20

Flutter与Dart 入门

为什么采用dart Flutter采用Dart语言进行开发,而并非Java,Javascript这类热门语言,这是Flutter团队对当前热门10多种语言慎重评估后选择。...doctor,配置IDE这几步,具体配置过程就不赘述了,大家可以参考Flutter中文网教程: Windows上搭建Flutter开发环境 Linux上搭建开发环境 Dart编程语言快速入门...C++,C语言,或者Java,你可以短短几天内用Dart来开发) Reactive(响应式编程) Dart一些重要概念 Dart,一切都是对象,所有的对象都是继承自Object Dart是强类型语言...Dart支持顶层变量,也支持变量或对象变量 Dart没有public protected private等关键字,如果某个变量以下划线(_)开头,代表这个变量在库是私有的 Dart一些语法特点 如果熟悉...异步 Dart提供了类似ES7async await等异步操作,这种异步操作Flutter开发中会经常遇到,比如网络或其他IO操作,文件选择等都需要用到异步知识。

1.3K20

Dart 学习之开发语言概览,带思维导图(二)

库和可见性 使用import关键字导入 dart内置库,使用dart:xxxx 其他库,package:xxxx 以下划线(_)开头成员仅在代码库可见 每个 Dart 程序都是一个库,即便没有使用关键字...lib2.Element element2 = lib2.Element(); 导入库一部分 只想使用代码库一部分,你可以有选择地导入代码库 // 只导入 lib1 foo。...(Import only foo). import 'package:lib1/lib1.dart' show foo; // 导入 lib2 除了 foo 外所有。...import 'package:lib2/lib2.dart' hide foo; 注释 单行注释 单行注释以 // 开始。所有 // 和该行结尾之间内容被编译器忽略。...Mixin 是一种多重继承复用某个中代码方法模式 使用with关键字 使用mixin定义 使用on规定哪个可以使用 覆写操作符基本格式: 返回类型 operator 操作符(参数1,参数2.

1.6K20

Fluter 学习笔记 之 Dart 语言入门

Dart number 类型分为 int 和 double ,其中 java long 对应也是 Dart int 类型。Dart 没有 float 类型。...lan = new Map(); 变量 Dart 不需要给变量设置 setter getter 方法, 这和 kotlin 等类似。...Dart 中所有的基础类型、等都继承 Object ,默认值是 NULL, 自带 getter 和 setter ,而如果是 final 或者 const 的话,那么它只有一个 getter 方法。...其中 const 值在编译期确定,final 值要到编译时才确定。(ps Flutter Release 下是 AOT 模式。) Dart数值,作为字符串使用时,是需要显式指定。...Dart 多构造函数,可以通过如下代码实现。默认构造方法只能有一个,而通过Model.empty() 方法可以创建一个空参数,其实方法名称随你喜欢。

63020

Dart语法详解系列篇(二)-- 与函数八、Dart与函数

基于Mixin继承意味着虽然每个(除了Object)只有一个超,但是体可以多个层次结构重用。 (一)使用成员 对象具有由函数和数据(分别为方法和实例变量)组成成员。...({'x': 1, 'y': 2}); 2.Dart2,创建对象时,new关键字可以省略。...{y}'); // } } 6.构造函数调用流程 默认情况下,子类构造函数调用超无参构造函数。超构造函数构造函数体开头被调用。如果 还使用初始化列表,则在调用超之前执行。...为避免任何意外副作用,只需调用一次getter,将其值保存在临时变量。 (10)抽象方法 实例,getter和setter方法可以是抽象,定义一个接口,但将其实现留给其他。...2).你不能显式实例化枚举。 (十三)向添加功能:mixin (重难点,需要掌握) Mixins是一种多个层次结构重用代码方法。

2.8K30

Flutter设置更好Logging指南

今天,我们将研究可以极大减少应用程序调试时间任务之一。一旦您习惯了应用程序以某种方式运行日志,您将很快能够注意到为什么某些东西不起作用。...设置 将记录器包添加到您项目中 logger: ^0.6.0 复制代码 用法 要使用记录器,您可以创建一个新记录器并使用其中一个方法调用进行记录。...记录器缺少一件事是它正在打印名称。我希望将其作为第一条信息。 创建一个名为 log_printer.dart 新文件,用于打印传入消息。这是最基本打印机类型,没有什么特别之处。...final logger = Logger(printer: SimpleLogPrinter()); 复制代码 适合我日志类型是具有颜色并知道哪个正在打印日志。...final log = getLogger('PostService'); 复制代码 最后要做是设置日志记录级别,以便您不会一直看到所有日志。主文件设置应用程序运行之前级别。

1.6K00

Flutter 面试知识点集锦

2Dart if 等语句只支持 bool 类型,switch 支持 String 类型。 3、Dart 数组和 List 是一样。...ModelA.empty(); //返回一个设置了nameModelA ModelA.forName(this.name); } 12、getter setter 重写 Dart...中所有的基础类型、等都继承 Object ,默认值是 NULL, 自带 getter 和 setter ,而如果是 final 或者 const 的话,那么它只有一个 getter 方法,Object...image 、接口、继承 Dart 没有接口,都可以作为接口,把某个当做接口实现时,只需要使用 implements ,然后复写父方法即可。...Zone Dart 可通过 Zone 表示指定代码执行环境,类似一个沙盒概念, Flutter C++ 运行 Dart 也是 _runMainZoned 内执行 runZoned 方法启动

5K61

Flutter必备语言Dart教程03 - ,泛型

上篇我们学习了Flutter必备语言Dart教程02 - 控制流,异常,现在我们继续学习Dart和泛型。 Class 以下是Dart声明一个简单,并创建它实例方法。 ?...这里我们Pug继承自Dog,并使用super关键字,传入适当参数,调用Dog构造函数。 您还可以冒号(:) 之后使用关键字this来调用同一其他构造函数。...但有时你想自定义属性getter和setterDart你可以使用 get 和 set 关键字来自定义getters和setters。 ?...控制可访问性 默认情况下,您在定义每个属性和方法都是公共,可以直接访问。Dart,您可以通过在其名称前添加“_”来使任何变量或方法变为私有。让我们将name属性设为私有。 ?...抽象和方法 您可以使用abstract关键字,Dart创建一个抽象。 ? 您只需要在声明之前提供abstract关键字。对于方法,只需提供签名并省略实现。

1.2K10

Dart dart:mirrors 库

如何解释这个库文档 通常,Dart声明名称使用Symbol实例表示。 每当doc讲述一个表示名称Symbol对象时,它就意味着用于构造s字符串。...状态:不稳定 dart:mirrors库不稳定,其API可能会因用户反馈而略有变化。 该库依赖于平台,因此它具有dart2js和Dart VM实现。 两者都在开发,可能还不支持所有操作。...LibraryDependencyMirror 导入或导出声明镜像. LibraryMirror LibraryMirror反映了Dart语言库,提供对库变量,函数和访问....MethodMirror MethodMirror反映Dart语言函数,方法,构造函数,getter或setter. Mirror Mirror 反映了一些Dart语言实体. [...]...TypedefMirror TypedefMirror表示Dart语言程序typedef. TypeMirror TypeMirror反映Dart语言,typedef,函数类型或类型变量.

1.3K30

Dart学习笔记(三)

int age, [String sex, bool isBlackHair]){ return '姓名:$name,年龄:$age, 性别:$sex,是否黑头发:$isBlackHair'; } 括号里面定义参数就是可选参数...', bool isBlackHair]){ return '姓名:$name,年龄:$age, 性别:$sex,是否黑头发:$isBlackHair'; } 2,如1例子,四个参数,其中后两个是可选参数...value*2:value).toList(); print(newlist); 4,Dart中所有的东西都是对象,包括int和double类型变量。...Objective-C,int、double是基础数据类型,不是对象,但是Dart,int、double也是对象。Dart万物皆对象,所有对象都继承自Object。...Dart里,一个默认构造函数与该类同名,如下所示: class Person { String name; int age; String sex = '男'; Person

44830

Flutter Lesson 2: Dart 语法简单介绍

重要概念(重要) Dart,所有的能够使用变量引用都是对象,每一个对象都有一个实例,包括但不限于数字,方法,字符串,null。所有的对象都集成于Object。...,同时你也可以方法内部创建方法 Dart支持顶层变量,也支持变量或对象变量 Dart私有变量用_开头,有点像JS我们自定义函数时候默认_开头为私有变量 Dart变量可以以字母或下划线开头...class 前端ES6才引入了概念,即使用class关键字创建一个 class Point { num x, y = 10; num z = 0; Point(num...class构建一个同时,定义一个与名字相同方法就定义了一个构造函数,如上面的PointPoint方法。...枚举类型具有如下限制: 无法继承枚举类型、无法使用 mixin 、无法实现一个枚举类型 无法显示初始化一个枚举类型 mixins Mixins 是一种继承重用 一个代码方法。

1.8K20
领券