Annotations auslesen

Hallo,
habe eine einfache Frage. Lassen sich auch Klassen-Annotations wie folgende auslesen?

public class Ziel extends ...{```
Habe bisher jede Menge Beispiele gesehen wie Methoden-Annotations ausgelesen werden. Nur bei Klassen habe ich es bisher nicht hinbekommen.

THX für eure Antworten

was mag das für eine Suche gewesen sein, ‘java read class annotation’ hab ich versucht und in Sekunden genug gefunden

Link


da insbesondere auch interessantes zu eigendefinierten Annotations,
die anscheinend nur auslesbar sein wenn speziell (wiederum mit Annotation) markiert sind (so steht es dort und bei mir im Test auch der Fall)

was bestimmte Zusatz-Frameworks vielleicht nicht mit ihren neu definierten Annotations machen?..

Eben auf diese Weise habe ich es auch probiert, ist eventuell etwas an der Annotation falsch deklariert?

@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface Developer {
    String developer();
    String date();
}```

Zeig mal, wie genau du versuchst hast die Annotation auszulesen.

        
        Class c=Ziel.class;
        for(Annotation a: c.getAnnotations()){
            System.out.println(a.toString());
        }
        for(Annotation a: c.getDeclaredAnnotations()){
            System.out.println(a.toString());
        }
        //System.out.println(c.getAnnotation(Developer.class).toString()); Nullpointer```

Du machst es dir unnötig kompliziert. Arbeite doch mit isAnnoationPresent:

	if(cl.isAnnotationPresent(Developer.class)) {
		Developer developer = cl.getAnnotation(Developer.class);
		System.out.println(cl + " <-- Developer: " + developer.name() + "  Date: " + developer.date());
	}
}```

folgendes vollständige Testprogramm

import java.lang.annotation.Annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;

public class Test2
{
    public static void main(String[] args)
        throws Exception
    {
        Class c = Ziel2.class;
        for (Annotation a : c.getAnnotations())
        {
            System.out.println(a.toString());
        }
        for (Annotation a : c.getDeclaredAnnotations())
        {
            System.out.println(a.toString());
        }
    }
}

@ Developer2(developer = "spellsleeper", date = "30.09.2014") // ohne Leerzeichen, nur hier fürs Forum
class Ziel2
    extends ArrayList
{

}

@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@interface Developer2
{
    String developer();

    String date();
}

gibt bei mir


@test.Developer2(developer=spellsleeper, date=30.09.2014)
@test.Developer2(developer=spellsleeper, date=30.09.2014)

aus, bei dir nicht @spellsleeper ?

[QUOTE=SlaterB]…
aus, bei dir nicht @spellsleeper ?[/QUOTE]
Nein! Vermutlich liegt dies an meiner Umsetzung der Annotation.@Target({PACKAGE,TYPE,METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface Developer { String developer(); String date(); }

Now:
Habe bei meiner Ziel Klasse den Konstruktor entfernt und wieder eingefügt. Nun läuft es.
Habe den Verdacht das es mal wieder am Cache von Netbeans liegt. THX