2013-11-26 2 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"}) 

The Map должно быть Contant выражение (отсюда const), и вы должны использовать String для ключа Map.

+0

Человек, который быстро, спасибо! – mrand01

Смежные вопросы