Announcement

Collapse
No announcement yet.

Problem mit Annotationen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit Annotationen

    Hallo,

    ich habe ein Problem bei der Verwendung von Annotationen. Ich habe dazu folgendes Beispiel erstellt:

    Code:
    import java.lang.annotation.*;
    
    @Target(ElementType.METHOD)
    public @interface TestCase
    {
      String testsuite();
    }
    Code:
    import java.lang.reflect.Method;
    
    public class MyClass
    {
      @TestCase(testsuite = "XYZ")
      public void abc()
      {
      }
    
      public static void main(String[] args)
      {
        MyClass myObj = new MyClass();
        try
        {
          Method m = myObj.getClass().getMethod("abc", null);
          TestCase tc = m.getAnnotation(TestCase.class);
          System.out.println(tc.testsuite());
        }
        catch (NoSuchMethodException ex)
        {
        }
      }
    }
    Nun verursacht der TestCase eine NullPointerException, d. h. die Annotation kann nicht abgefragt werden. Was mache ich falsch?

    Vielen DAnk und viele Grüße

  • #2
    Füge in der Annotation ein

    @Retention(RetentionPolicy.RUNTIME)

    damit diese auch zur Laufzeit zur Verfügung steht.

    Des Weiteren hast du keine Methode "abc(null)". Die Zeile
    Method m = myObj.getClass().getMethod("abc", null);
    führt da schon zu einem Fehler (den du allerdings nicht abfängst->NoSuchMethodException)
    Method m = myObj.getClass().getMethod("abc");
    wäre korrekt.
    TestCase tc = m.getAnnotation(TestCase.class);
    liefert dann die NullpointerException, weil m null ist


    Weiterhin ist der Weg umständlich die Annotation zu finden. Es macht ja keinen Sinn, eine Annotation zu nutzen, wenn ich den Methodennamen wissen muss, um die Annotation zu finden. Dann kann ich mir die Annotaion gleich sparen

    Beispiel
    Klasse initiieren
    Class<Weinliste> c=Weinliste.class;

    Alle Methoden holen
    Method[] methoden=c.getDeclaredMethods();

    Alle Methoden durchgehen
    for(Method m:methoden)
    {
    Hole die gewünschte Annotation an der jeweiligen Methode
    Annotation annotation=m.getAnnotation(TestCase.class);
    if( annotation instanceof TestCase)

    TestCase tc=(TestCase)annotation;
    tc.testsuite()
    ....mach was

    }
    Zuletzt editiert von Christian Marquardt; 05.05.2012, 11:58.
    Christian

    Comment

    Working...
    X