Dart 中的“const”和“final”关键字有什么区别?

2024-04-09

两者有什么区别const and finalDart 中的关键字?


dart 的网站上有一篇文章,解释得很好。 https://news.dartlang.org/2012/06/const-static-final-oh-my.html

Final:

“final”表示单赋值:final 变量或字段must有一个初始化程序。一旦赋值,final 变量的值就不能更改。最终修改变量.


Const:

“const”在 Dart 中的含义更加复杂和微妙。常量修改values。您可以在创建集合时使用它,例如 const [1, 2, 3],也可以在构造对象(而不是 new)时使用它,例如 const Point(2, 3)。这里,const意味着对象的整个深层状态可以在编译时完全确定,并且对象将被冻结并且完全不可变。

Const 对象有一些有趣的属性和限制:

它们必须根据可以在编译时计算的数据创建。 const 对象无法访问运行时需要计算的任何内容。 1 + 2 是有效的 const 表达式,但 new DateTime.now() 不是。

它们是深刻的、传递性的不可变的。如果您有一个包含集合的最终字段,则该集合仍然可以是可变的。如果你有一个 const 集合,那么其中的所有内容也必须是 const,递归的。

他们是规范化的。这有点像字符串驻留:对于任何给定的 const 值,无论 const 表达式被求值多少次,都会创建并重用单个 const 对象。


那么这是什么意思?

Const:
如果您拥有的值是在运行时计算的(new DateTime.now(),例如),您可以not使用 const 来代替它。但是,如果该值在编译时已知(const a = 1;),那么你应该使用const over final。两者之间还有另外 2 个较大差异const and final。首先,如果您正在使用const在类中,您必须将其声明为static const而不仅仅是const。其次,如果你有一个const集合,里面的所有东西都在const。如果你有一个final集合,里面的所有东西都是not final.

Final:
final应该用过const如果您在编译时不知道该值,它将在运行时计算/抓取。如果您想要一个无法更改的 HTTP 响应,如果您想从数据库中获取某些内容,或者如果您想从本地文件中读取内容,请使用final。任何在编译时未知的东西都应该是final over const.


话虽如此,两者const and final不能重新分配,但 a 中的字段final对象,只要它们不是const or final它们本身可以被重新分配(与const).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dart 中的“const”和“final”关键字有什么区别? 的相关文章

随机推荐

  • 如何编写 GraphQL 查询

    我有一个有效的网络 graphql 查询 me on Student profile fullName emailId mobileNumber civilId address city state country zipCode user
  • 使用 OkHttp 时是否可以限制带宽?

    使用 OkHttp 是否可以限制带宽 可能使用网络拦截器 您可以通过两种方式使其发挥作用 手动发送请求并读取流 并在读取时进行节流 添加拦截器 使用OkHttp最好的方法是Interceptor 还有几个简单的步骤 继承Intercepto
  • 为旧版本的 Android 覆盖 Android-L CardView state_pressed

    在最新的 Android SDK 中 我们现在有了新的 CardView 我已经用新版本替换了旧的 CustomCardView 但是当在旧版本的 Android 上运行时 我看到state pressed state focused是显示
  • PHP升级到7版本后,为什么无法使用mongodb驱动?

    这是我发现的一个奇怪的情况 我一直在一个项目中同时使用 PHP 和 MongoDB 并更新了相关软件 升级后 我确实更新了新的conf文件 一切都很好 除了当我尝试使用MongoClient类中 我收到以下致命错误 致命错误 未捕获错误 在
  • 如何对wp_query的结果进行排序

    我正在尝试对 wp query 的结果进行排序 我想按不同的参数对其进行排序 而不再次进行查询 我有类似的东西 the query new WP Query args 我想对 the query 进行排序 WP Query 返回这样的结构
  • WPF ClickOnce DPI 感知每监视器 v2

    我将设置这个问题并自己回答 以便其他人可以更轻松地搜索并找到正确的答案 我不得不用谷歌搜索几个小时并从多个来源编译最终结果 所以问题是 如何在 ClickOnce 场景 WPF 特别是 c 中启用 Per Monitor v2 DPI 感知
  • Cordova 3.3 - fileSystem.root.fullPath 返回“/”而不是完整路径

    我有一段使用 Cordova 2 7 的代码 我将我的应用程序升级到 Cordova 3 3 并升级了我开发的所有自定义插件 我使用 Cordova 2 7 成功获取了 iOS 上 Documents 目录的完整绝对路径 但使用 Cordo
  • 如何通过在打字稿中调用函数来关闭bootstrap 4模式

    我正在使用 bootstrap 4 模式 然后是example https www w3schools com bootstrap4 bootstrap modal asp 下面是template code div class contai
  • Nhibernate:获取真实的实体类而不是代理类[重复]

    这个问题在这里已经有答案了 有没有办法让 nhibernate 返回我的类而不是它的代理类 如果不是偷懒或者不能更新我不介意 您可以使用此代码取消代理类 session PersistenceContext Unproxy proxiedI
  • iTunes风格模态视图控制器链(表单)

    有没有办法实现 iTunes 风格的模态视图控制器链 见截图 我环顾四周但找不到任何关于此的真正问题 我不是在寻找替代品或解决方法 只是想知道是否可以使用当前的 SDK 或 iOS 5 0 尽管我们不应该谈论它 简单的是 否就足够了 对于那
  • 对 Android APK 进行逆向工程以获取代码? [复制]

    这个问题在这里已经有答案了 可能的重复 Android 从 APK 文件获取源代码 https stackoverflow com questions 3593420 android getting source code from an
  • 如何使用 iOS 图表更改无数据消息?

    使用时iOS 图表 https github com danielgindi charts并且没有数据 有一条默认消息显示 没有可用的图表数据 这个默认值可以编辑和处理翻译吗 这是您在显示数据之前自定义图表外观的方法 IBOutlet pr
  • Unescape 或 html 解码

    我正在使用树枝 1 12 2 我的代码从代码隐藏生成一些元素 当使用最新版本的 twig 渲染这些元素时 它们会进行 html 编码 for item in files folders tr class td img src border
  • 为什么即使 use_transactional_fixtures = false after_commit 也没有运行

    rspec 中的事务装置会阻止调用 after commit 但即使我使用以下命令禁用它们 RSpec configure do config config use transactional fixtures false end The
  • 比较 Double 和 Int 的最佳方式是什么?

    以下 C 代码不起作用 int iValue 0 double dValue 0 0 bool isEqual iValue Equals dValue 那么问题来了 比较 Double 和 Int 的最佳方法是什么 您确实不能以天真的方式
  • 交互式闪亮全局日期选择器

    我正在一个没有良好日期选择器的环境中使用 R 并且我正在尝试使用 R 弹出一个日期选择器来填补空白 大多数 R 日期选择器都需要 GTK 等 UI 库 闪亮的没有 我想做的就是弹出一个日期选择器 让用户选择日期 然后结束闪亮的会话并将日期传
  • 如何检测 Java 系统属性是否已更改?

    我想知道系统属性何时更改 我在应用程序服务器中有一个应用程序 它以某种方式更改系统属性 System setProperty 我认为 我看了看 发现了不同的方法 JPDA https stackoverflow com questions
  • Collections.sort 方法抛出类 java.lang.Integer 无法转换为类 java.lang.Double 错误[重复]

    这个问题在这里已经有答案了 我从基于空手道的 API 自动化中的 JSON 响应获取一些运行时值 我将它们存储到 ArrayList 中 例如 def ArrayList Java type java util ArrayList def
  • 具有动态数据库连接的flask-sqlalchemy

    我有一个主数据库 其中存储每个客户端自己的数据库连接 因此每个客户端都使用 2 个数据库 主数据库和自己的数据库 必须确定其连接 对于每个 http 调用 我怎样才能使用flask sqlalchemy扩展来做到这一点 或者可能是 纯粹是s
  • Dart 中的“const”和“final”关键字有什么区别?

    两者有什么区别const and finalDart 中的关键字 dart 的网站上有一篇文章 解释得很好 https news dartlang org 2012 06 const static final oh my html Fina