我想知道是否可以创建可以包含可变数量参数的自定义注释。也许一个伪示例是最好的。我在这里开始:
class TestMetadata {
final int prop;
final String prop2;
const TestMetadata({int prop, String prop2}) : this.prop = prop, this.prop2 = prop2;
}
const TestMetadata testMetadata = const TestMetadata();
目前,这将允许您注释任何类似的内容:
@testMetadata
void myFunction() {
}
@TestMetadata(prop:1, prop2:"Hello")
void myOtherFunction() {
}
我希望能够输入更多参数而无需明确定义它们。我试图将一个Map(我能想到的全部)添加到TestMetadata类中,如下所示:
class TestMetadata {
final int prop;
final String prop2;
final Map theRest;
const TestMetadata({int prop, String prop2, Map theRest}) : this.prop = prop, this.prop2 = prop2, this.theRest = theRest;
}
但是当试图从注释中访问Map时:
@TestMetadata(prop:1, prop2:"Hello", theRest:{param:"World"})
void myOtherFunction() {
}
我收到错误消息:
"常量创建的参数必须是常量表达式。"很公平,这是有道理的。还有其他人有什么想法吗?
答案 0 :(得分:2)
您可以使用Map
作为元数据,但需要通过以下方式传递Map
:
@TestMetadata(prop:1, prop2:"Hello", theRest:const{"param":"World"})
Map
需要是明确的表达式(因此const
),您需要使用String
作为Map
密钥。