ich mit Annotations-Prozessor versucht, einige Methoden wie das erzeugen:Wie kann ich Anmerkungen verwenden, um einen parametrisierten Typ darzustellen?
void result(Consumer<Type> name){
}
, als ich mit einer Anmerkung müssen einen Parameter darstellen.
@Retention(RetentionPolicy.SOURCE)
public @interface Parameter {
String name();
Class<?> type();
}
Aber die Annotation Mitglieder nur Unterstützung Kompilierung-Konstanten, so dass es eine parametrisierte Typ Lieferung direkt nicht möglich ist, zum Beispiel des folgenden illegal Java-Code kann nicht durch Annotation darstellen werden.
@Parameter(name ="ids",type = ArrayList<Integer>.class)
Ich habe versucht, eine neue Anmerkung zu erklären, den Typ zu repräsentieren, weil die allgemeinen Parameter ein oder mehr sein kann und verschachtelt, wie ArrayList <HashMap <String, String >>
, aber Java unterstützt keine Anmerkungen auf sich selbst verweisen, wird es zyklische Anmerkung verursachen Elementtyp Fehler. Die folgende Anmerkung ist ebenfalls unzulässig.
public @interface Type{
Class<?> type();
Type[] parameters() default {};
}
@Retention(RetentionPolicy.SOURCE)
public @interface Parameter {
String name();
Type type();
}
Irgendwelche Lösungen?
Was möchten Sie mit dieser Anmerkung modellieren? –
@SotiriosDelimanolis ich mit Annotations-Prozessor versucht, einige Methoden wie das erzeugen: 'Leere Ergebnis (Consumer Name)' –
DouO
Ja, beschreiben, dass die Verwendung Fall näher. Es ist nicht sofort offensichtlich, warum Sie es genau so brauchen. Siehe [Was das XY-Problem ist?] (Https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –