verwenden von benutzerdefinierten Anmerkungen
Fand ich mehrere Verwandte (nicht doppelte) Frage, aber Sie hat mich nicht zufrieden gestellt.
Ich bin nicht in der Lage zu verstehen, wo und warum custom annotations
?
Ich Lesen Sie ein Beispiel für benutzerdefinierte Anmerkungen im Buch, aber es wurde nicht erklärt gründlich.
@interface MyAnno
{
String str();
int val();
}
class MyClass
{
@MyAnno(str = "Annotation example", val = 100)
public static void myMeth()
{
System.out.println("Inside myMeth()");
}
}
class CustomAnno
{
public static void main(String args[])
{
MyClass.myMeth();
}
}
Die Ausgabe ist wie erwartet Inside myMeth()
.
Ich habe paar Fragen zu diesem Beispiel.
1 - Wie kann ich
String str()
undint val()
in diesem Programm? ODERWas ist die Verwendung von abstrakten Methode eines
custom annotation
?2 - Warum
custom annotations
. Ich meine, dass das, was Wirkung, die Sie auf einen code.3 - Wie erstelle ich eine Anmerkung, die mit Effekten wie @override ist?(Damit meine ich jede Art von Wirkung, die wahrgenommen werden kann)
Wenn dieses Beispiel ist nutzlos für Sie, dann geben Sie mir bitte eine geeignete kleine Beispiel, in dem eine custom annotation
verwendet wird.
- Verstehen Sie, was Annotationen sind im Allgemeinen für?
- Zum hinzufügen von Informationen ergänzen, die in eine source-Datei
- Wissen Sie, was annotation-Prozessor ist?
- Die Anmerkung ist nicht wirklich in deinem Beispiel - Sie können wahrscheinlich feststellen, bessere Beispiele online.
- Ich bin auf der Suche nach einem Beispiel, das hat einen Effekt wie überschreiben ist ( Ursachen compile-Zeit Fehler, die ich die Methode nicht überschrieben wird)
- Das wird nicht möglich sein - das Verhalten der override ist implementiert, indem der compiler selbst - Sie wäre nicht in der Lage es selbst implementieren. Siehe auch: stackoverflow.com/questions/31097555/...
- Ich habe modifiziert Ihren code ein bit - check it out in der Antwort unten in die neue Bearbeiten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Drei wichtigsten Gründe für die Verwendung von benutzerdefinierten Anmerkungen:
In jedem Fall, die Nutzung von Annotationen verringert die Wahrscheinlichkeit von Fehlern im code, im Vergleich zu anderen nicht-annotation Ansätze.
Ist hier ein minimal-Beispiel. Der folgende code veranschaulicht die Verwendung des benutzerdefinierten annotation.
Ist es, über Mitarbeiter und Leistungen. Wenn wir eine Anforderung haben, so dass BasicBenefits die angewendet werden, um alle Arten von verkaufsangestellten, dann können wir kommen mit benutzerdefinierten annotation wie BasicBenefits, und kommentieren Sie alle Arten von Mitarbeiter-Implementierungen (z.B. CorporateEmployee, ContractEmployee, ManagerEmployee etc. etc.) mit der BasicBenefits.
Ihr code Aussehen fast da, nur zwei Dinge, die enthalten sein müssen in der main-Methode.
Hier ist ein wenig modifiziert-code aus, was Sie haben:
Abstrakten Methoden der annotation definieren Sie die Werte, die übergeben werden können (in Ihrem Fall
str = "Annotation example", val = 100
). Sie können Sie mithilfe von reflektion (- Methode.<T>getAnnotation(Class<T>)
). Benutzerdefinierte Anmerkungen, die keinen direkten Einfluss. Sie sind nur sinnvoll, wenn Sie bewerten.Beachten Sie, dass Anmerkungen in Ihren benutzerdefinierten annotation mit
@Retention(value=RUNTIME)
in der Lage sein, es zu Lesen über Reflexion.@Test
annotation. JUnit ist auf der Suche nach Methoden mit dieser annotation über reflection aus und führt Sie als Testfälle.Von nutzen sein, Annotationen müssen analysiert werden, ersten. Die integrierte Anmerkungen (wie
@Override
oder@FunctionalInterface
zu nennen-die meisten offensichtlichen) analysiert werden, indem der compiler selbst. Für individuelle Anmerkungen, diese Jungs sind Häufig analysiert, die von Drittanbieter-frameworks, obwohl wir können auch die reflection-Mechanismus, um zu demonstrieren, wurde diese Technik im standalone-code.Durch ein Beispiel, der folgende code ändert sein Verhalten zur Laufzeit abhängig vom Wert des Feldes erklärt werden in der benutzerdefinierten annotation namens
@SwitchingAnnotation
: