Annotations ableiten

Status
Nicht offen für weitere Antworten.

Landei

Top Contributor
Ich habe gerade in der Guice-Dokumentation gesehen, dass man Annotations ableiten kann - das habe ich bisher noch nie gesehen. Aber das hier scheint für den Compiler OK zu sein.
Code:
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {}

public class TestImpl implements Test {
  public Class<? extends Annotation> annotationType() {
    return Test.class;
  }
}

Wenn ich es richtig verstehe, braucht das Guice die Klasse, um equals und hashCode zu überschreiben, damit das mit ihren Bindings hinhaut, und entsprechend wird auch die Implementierung und nicht die Annotation beim Binden übergeben. Das kann ich mir noch so ungefähr vorstellen.

Gibt es da noch andere Einsatzmöglichkeiten?
 

byte

Top Contributor
Annotations werden ja als Interface realisiert, aber interessant, das sowas geht. Es gibt aber eine Compilerwarnung, dass man Annotations nicht implementieren sollte.
Sinn und Zweck des ganzen ist mir aber nicht klar. Wie genau verwendet Guice denn eine solche Implementierung einer Annotation? Ich kann doch weiterhin nur mit der eigentlichen Annotation annotieren und nicht mit der Implementierung. :)
 

Landei

Top Contributor
Aus dem Handbuch:
Code:
@Retention(RUNTIME)
@Target({ FIELD, PARAMETER })
@BindingAnnotation
public @interface Named {
String value();
}
If we want to bind to @Named("Bob"), we first need an implementation of Named.
Our implementation must abide by the Annotation contract, specifically the
implementations of hashCode() and equals().
Code:
class NamedAnnotation implements Named {
final String value;
public NamedAnnotation(String value) {
this.value = value;
}
public String value() {
return this.value;
}
public int hashCode() {
// This is specified in java.lang.Annotation.
return 127 * "value".hashCode() ^ value.hashCode();
}
public boolean equals(Object o) {
if (!(o instanceof Named))
return false;
Named other = (Named) o;
return value.equals(other.value());
}
public String toString() {
return "@" + Named.class.getName() + "(value=" + value + ")";
}
public Class<? extends Annotation> annotationType() {
return Named.class;
}
}
Now we can use this annotation implementation to create bindings to @Named.
Code:
bind(Person.class)
.annotatedWith(new NamedAnnotation("Bob"))
.to(Bob.class);
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Java Class Intrumentation mit Annotations in Laufzeit Allgemeine Java-Themen 1
hdi Zu Reflections & Annotations Allgemeine Java-Themen 10
C Polymorphie Fragen zur Annotations von Persistenz Allgemeine Java-Themen 2
L Annotations um Gültigkeit von Attributen zu definieren? Allgemeine Java-Themen 4
K Annotations der aufrufenden Methode ermitteln Allgemeine Java-Themen 11
ruutaiokwu junit mit annotations geht nicht? Allgemeine Java-Themen 5
N Method-Annotations in aufgerufener Methode auswerten Allgemeine Java-Themen 2
W Annotations selbst erstellen und auswerten Allgemeine Java-Themen 4
dunhillone Mittels Annotations Methoden "erweitern"? Allgemeine Java-Themen 11
V Reflection - Field-Instanz und Annotations Allgemeine Java-Themen 6
G Annotations. warum ? Allgemeine Java-Themen 9
L Annotations mit Vererbung Allgemeine Java-Themen 4
H eigene Annotations Allgemeine Java-Themen 2
byte Annotations: Arrays auslagern Allgemeine Java-Themen 2
G @Annotations Allgemeine Java-Themen 2
S Singleton-Klasse und ThreadLocal-Klasse von abstrakter Klasse ableiten? Allgemeine Java-Themen 2
B Interface und von Thread ableiten Allgemeine Java-Themen 6
R Ableiten - Methoden aufruf bei abgeleiteten Klassen Allgemeine Java-Themen 4
0x7F800000 Wovon eigene Events für spezialisierte JComponents ableiten? Allgemeine Java-Themen 2
S TableModel von AbstractTableM. oder DefaultTableM. ableiten? Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben