Child pages
  • Annotációk kezelése
Skip to end of metadata
Go to start of metadata
      
      
Page viewed times

4 Comments

  1. Sziasztok.

    Csináltam egy @Id annotációt, melynek van egy int paramétere. Az lenne a kérdésem hogy lehetne megakadályozni hogy ez a paraméter ne lehessen 0 vagy negatív szám ?

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.FIELD)
    public @interface Id {
    public int value() default 1;
    }

    Természetesen fordítási időben gondoltam az ellenőrzést, nem pedig úgy hogy amikor fut a program kiolvasom mi van az annotáció paramétereként megadva és dobok egy exception-t.
    Hiszen a fordító azt is felismeri hogy @Id("hahó") nem lehet, hiszen nem String típusú a paraméter. De vajon egy típuson belüli validáció lehetséges-e fordítási időben, hiszen jó lenne ha valaki @Id(-28)-at, ír akkor rögtön megjelenjen a piros villogó a fejlesztő eszközén.

    Joe

     

    1. Az APT-t (http://docs.oracle.com/javase/7/docs/technotes/guides/apt/) nézném meg, azzal lehet ilyesmiket csinálni. Elég régen használtam, de ha jól emlékszem, akkor kivételdobáskor leáll a buildelés is.

      Eclipse-ben is van Java Compiler / Annotation Processing beállítási lehetőség, de ezt még sosem használtam.

  2. Sziasztok !

    Valamit nagyon nem értek, persze lehet hogy a fától nem látom az erdőt :)
    Van egy annotációm, a neve View. Amikor egy osztálynál vizsgálom hogy el van-e látva ezzel az annotációval,
    kell egy "számomra értelmetlen" cast, különben a kód nem fordul le.
    Ha ugyanezt egy Field-nél vizsgálom, nem kell cast-olni. Az osztálynál miért kell ???
    Egyébként a dolog annotáció független, más annotációval is a helyzet ugyanez.


    Class cls = ...;
    Field field = cls.getField(...);

    View view = (View)cls.getAnnotation(View.class); //??? mért kell cast ???
    View view2 = field.getAnnotation(View.class);

     

    Dokumentáció szerint a Class osztály getAnnotation() metódusa:

    public <A extends Annotation> A getAnnotation(Class<A> annotationClass)

    Dokumentáció szerint a Field osztály getAnnotation() metódusa:

    public <T extends Annotation> T getAnnotation(Class<T> annotationClass)

  3. A megoldás: a mellékelt forrás első sorát így kell javítani:

    Class<?> cls = ...