2013-11-26 87 views
3

我想知道是否有可能創建一個可以具有可變數量參數的自定義註釋。也許一個僞示例是最好的。這裏就是我開始:具有未知參數長度的自定義元數據?

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() { 

} 

我希望能在更多的參數來養活,而無需顯式定義它們。我試圖添加一個地圖(這是所有我能想到的)到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; 
} 

而是試圖從一個註解訪問地圖像這樣的時候:

@TestMetadata(prop:1, prop2:"Hello", theRest:{param:"World"}) 
void myOtherFunction() { 

} 

我收到一條錯誤消息:

「常量創建的參數必須是常量表達式。」夠公平的,這是有道理的。有沒有其他人有任何想法?

回答

2

您可以使用Map爲您的元數據,但你需要通過Map以下列方式:

@TestMetadata(prop:1, prop2:"Hello", theRest:const{"param":"World"}) 

Map需求是含量的不同表達(因此const),你需要使用StringMap鍵。

+0

很快的人,非常感謝! – mrand01