In primo luogo - Non sono sicuro di cosa si intende per annotazioni ricorsive. Intendi annotazioni che possono contenere riferimenti ad altre annotazioni dello stesso tipo? Qualcosa di simile
@Panel(layout=BorderLayout.class,
nested={
@Panel(region=NORTH, layout=FlowLayout.class, ...)
@Panel(region=SOUTH, layout=FlowLayout.class, ...)
}
)
(che sarebbe un esempio di dove mi piacerebbe utilizzarlo se fosse possibile ...)
Per quanto riguarda il mio uso di annotazioni personalizzati (e trasformatori): la generazione di codice .
Vedi http://code.google.com/p/javadude/wiki/Annotations
Per esempio, le proprietà JavaBean:
@Bean(
properties={
@Property(name="name"),
@Property(name="phone", bound=true),
@Property(name="friend", type=Person.class, kind=PropertyKind.LIST)
}
)
public class Person extends PersonGen {
// generated superclass PersonGen will contain getters/setters
// field definitions, property change support...
}
o un po 'di confusione in esempio
package sample;
import java.util.List;
public interface IFlightAgent {
List<IFlight> getFlight();
void reserve(IFlight flight);
}
public interface ICarAgent {
List<ICar> getCars();
void reserve(ICar car);
}
public interface IHotelAgent {
List<IHotel> getHotels();
void reserve(IHotel hotel);
}
package sample;
import com.javadude.annotation.Bean;
import com.javadude.annotation.Delegate;
@Bean(delegates = {
@Delegate(type = IHotelAgent.class,
property = "hotelAgent",
instantiateAs = HotelAgentImpl.class),
@Delegate(type = ICarAgent.class,
property = "carAgent",
instantiateAs = CarAgentImpl.class),
@Delegate(type = IFlightAgent.class,
property = "flightAgent",
instantiateAs = FlightAgentImpl.class)
}
)
public class TravelAgent extends TravelAgentGen
implements IHotelAgent, ICarAgent, IFlightAgent
{
// generated superclass TravelAgentGen will create instances
// of the "instantiateAs" classes and delegate the interface
// methods to them
}
Vedi The drawbacks of annotation processing in Java? e la mia risposta ad esso per alcuni potenziali problemi con il loro utilizzo .
Sarei interessato a vedere un esempio di annotazioni ricorsive, così come un uso per loro. Hai qualche riferimento che potresti pubblicare per riempire un po 'la tua domanda? –
No, al momento non ho riferimenti simili. Ma posso dirvi l'uso: un compilatore di un linguaggio funzionale emette un codice java, e il codice è annotato con alcune informazioni utili (tipo, severità, ecc.) Raccolte dal compilatore. Ovviamente, l'annotazione per @Type è ricorsiva. – Ingo