Myślę, że może to nie być możliwe w Javie, ponieważ adnotacje i jej parametry są rozwiązywane w czasie kompilacji. Mam następujący interfejs,
public interface FieldValues {
String[] FIELD1 = new String[]{"value1", "value2"};
}
i inna klasa jako,
@SomeAnnotation(locations = {"value1", "value2"})
public class MyClass {
....
}
Oznaczam wiele klas adnotacją i chciałbym wiedzieć, czy mogę uniknąć określania ciągów w każdej adnotacji, której wolałbym zamiast tego użyć
@SomeAnnotation(locations = FieldValues.FIELD1)
public class MyClass {
....
}
Jednak powoduje to błędy kompilacji, takie jak wartość adnotacji powinna być inicjatorem tablicy itp. Czy ktoś wie, jak mogę użyć stałej String lub stałej String [], aby podać wartość do adnotacji?
źródło
enum
w adnotacjach, ale nie są one stałymi w czasie kompilacji. Różnica staje się widoczna, gdy piszeszstatic final EnumType VARIABLE = EnumType.ENUM_CONSTANT;
i próbujesz użyćVARIABLE
w adnotacji; to nie zadziała. Możesz używać tylko tego,EnumType.ENUM_CONSTANT
co nie jest wyrażeniem stałym, ale jest dozwolone w adnotacjach (iswitch
instrukcjach).Możesz użyć stałej (tj. Statycznej, końcowej zmiennej) jako parametru adnotacji. Jako szybki przykład, dość często używam czegoś takiego:
Zwróć uwagę, że możliwe jest przekazanie
TEST_TIMEOUT
stałej bezpośrednio do adnotacji.Z drugiej strony, nie przypominam sobie, że kiedykolwiek próbowałem tego z tablicą, więc możesz napotkać pewne problemy z niewielkimi różnicami w sposobie reprezentowania tablic jako parametrów adnotacji w porównaniu ze zmiennymi Java? Ale jeśli chodzi o drugą część twojego pytania, zdecydowanie możesz użyć stałego ciągu bez żadnych problemów.
EDIT: Właśnie próbowałem to z tablicy ciągów i nie napotkasz problem pan wspomniał - jednak kompilator nie mów mi, że „wartość atrybutu musi być stałe” mimo tablica jest określona jako
public static final String[]
. Może nie podoba mu się fakt, że tablice są zmienne? Hmm ...źródło
W swoim przykładzie nie dostarczasz jej z tablicą. Następujące kompilacje dobrze:
źródło
Niestety nie możesz tego zrobić z tablicami. W przypadku zmiennych niebędących tablicami wartość musi być ostateczną wartością statyczną.
źródło
Z Seam 2 http://seamframework.org/ można było rozwiązać parametry adnotacji w czasie wykonywania, używając języka wyrażeń w cudzysłowach.
W Seam 3 http://seamframework.org/Seam3/Solder ta funkcja to moduł Seam Solder
źródło
Możesz użyć wyliczenia i odnieść się do tego wyliczenia w polu adnotacji
źródło