@在Dart程序中做什么?

@在Dart程序中做什么?,dart,metadata,Dart,Metadata,我刚刚花了20个小时学习了Dart语言的基础知识,但当我在开源Dart程序中找到@前缀时,我想知道@指令在这些程序中做了什么 供参考: 元数据 使用元数据提供有关代码的其他信息。元数据注释以字符@开头,后跟对编译时常量的引用(如弃用)或对常量构造函数的调用。 所有Dart代码都有三个注释:@deprecated、@override和@proxy。有关使用@override和@proxy的示例,请参阅“扩展类”一节。下面是使用@deprecated注释的示例: 但是,@指令向代码中添加了哪些“附加

我刚刚花了20个小时学习了Dart语言的基础知识,但当我在开源Dart程序中找到
@
前缀时,我想知道
@
指令在这些程序中做了什么

供参考:

元数据 使用元数据提供有关代码的其他信息。元数据注释以字符@开头,后跟对编译时常量的引用(如弃用)或对常量构造函数的调用。 所有Dart代码都有三个注释:@deprecated、@override和@proxy。有关使用@override和@proxy的示例,请参阅“扩展类”一节。下面是使用@deprecated注释的示例: 但是,
@
指令向代码中添加了哪些“附加信息”?如果您通过编写以下构造函数来创建实例

@todo('seth', 'make this do something')
,而不是以下默认构造函数:

todo('seth", 'make this do something')
,我能从第一个构造函数中得到什么好处


我知道,使用内置元数据,如
@deprecated
@override
可以让我在运行应用程序时得到警告,但是我可以从自定义
@todo
的案例中得到什么,或者通过Github获得上述链接示例代码

您可以对代码进行一些“推理”。 您可以查询字段/方法/类/库/。。。具有特定注释的。 您可以使用反射获取这些代码部分。省道内反射由“省道:镜像”包完成

您可以在此处找到一个代码示例:

经常使用注释的一个示例是用于序列化或数据库持久化,在该示例中,您向类添加metatdata,该类可由序列化/持久化框架用作配置设置,以了解如何处理字段或方法

例如,您添加了一个
@Entity()
注释,以指示应该持久化此类。 在每个应该持久化的字段上添加另一个注释,如
@Column()
。 许多持久性框架都会根据此元数据自动生成数据库表。 为此,他们需要更多信息,因此您可以在应用作主键的字段上添加
@Id()
,并在
@Column(name:'first_name',键入:'varchar',length:32)
中定义数据库表和列的参数。
这只是一个例子。限制是你的想象力。

注释可以通过库访问。只要您想提供关于类、方法等的附加信息,就可以使用自定义注释。例如,它用于向dart2js编译器提供额外信息,以优化生成的JavaScript的大小

注释通常比应用程序作者对框架或库作者更有用。例如,如果要在Dart中创建REST服务器框架,可以使用注释将方法转换为web资源。例如,它可能类似于以下内容(假设您创建了@GET注释):

@GET(“/users/”)
列出getUsers(){
// ...
}
然后,您可以让框架在服务器启动时使用镜像扫描代码,以查找带有@GET注释的所有方法,并将该方法绑定到注释中指定的URL