You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart语言中@符号(at符号)的具体作用是什么?

Dart中@符号的含义与用途

Dart里的@开头的标识叫做元数据注解(Metadata Annotation),作用是给代码添加额外的标记信息,这些信息可以在编译期通过静态分析、代码生成工具读取,实现特定的逻辑处理,不会影响代码本身的运行逻辑。

常见用途

  • 内置规则校验:Dart SDK内置了少量常用注解,用来给编译器传递校验规则,比如示例里的@immutable,作用是标记类的所有实例属性都必须是final不可修改的,编译器会对标注了这个注解的类做校验,如果存在非final的实例属性就会抛出编译警告。
  • 第三方代码生成标记:绝大多数场景下的注解都是配合第三方代码生成套件使用的,比如Flutter开发常用的json_serializable、freezed等工具,都是靠识别指定注解来自动生成样板代码,你给出的示例就属于这类场景:
    • @JsonSerializable 标注当前类需要自动生成JSON序列化/反序列化逻辑,括号内的参数可以配置生成规则,示例里的createToJson: false就是指仅生成反序列化的fromJson逻辑,不生成序列化的toJson逻辑
    • @JsonKey 标注当前字段和JSON键名的映射关系,示例里就是把Dart类的field1和JSON的field_1绑定,field2和field_2绑定,适配后端常用的下划线命名格式
  • 自定义业务标记:你也可以根据业务需求自定义注解,配合自研的静态分析规则、代码生成逻辑实现自定义功能。

你给出的示例代码对应注解说明如下:

@immutable // 内置注解:标记该类所有实例属性不可修改
@JsonSerializable(createToJson: false) // json_serializable注解:生成反序列化逻辑,不生成序列化逻辑
class ClassA  {

  @JsonKey(name: 'field_1') // 绑定当前字段对应JSON的key为field_1
  final int field1;
  @JsonKey(name: 'field_2') // 绑定当前字段对应JSON的key为field_2
  final String field2;

  const ClassA(this.field1, this.field2);

  // 调用json_serializable自动生成的反序列化方法
  factory ClassA.fromJson(Map<String, dynamic> json) => _$ClassAFromJson(json);
}

内容的提问来源于stack exchange,提问作者Akbar Pulatov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:06:01