Primera - No estoy seguro de lo que entendemos por anotaciones recursivas. ¿Te refieres a anotaciones que pueden contener referencias a otras anotaciones del mismo tipo? Algo así como
@Panel(layout=BorderLayout.class,
nested={
@Panel(region=NORTH, layout=FlowLayout.class, ...)
@Panel(region=SOUTH, layout=FlowLayout.class, ...)
}
)
(lo cual sería un ejemplo de donde me gustaría utilizarlo si fuera posible ...)
En cuanto a mi uso de anotaciones personalizados (y procesadores): generación de código .
Ver http://code.google.com/p/javadude/wiki/Annotations
Por ejemplo, las propiedades 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 una confusión en el ejemplo
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
}
Ver The drawbacks of annotation processing in Java? y mi respuesta a ella por algunos problemas potenciales con su uso .
Estaría interesado en ver un ejemplo de anotaciones recursivos, así como un uso para ellos. ¿Tiene alguna referencia que pueda publicar para completar un poco su pregunta? –
No, no tengo tales referencias actualmente. Pero puedo decirte el uso: un compilador de un lenguaje funcional emite código java, y el código se anota con cierta información útil (como tipo, rigor, etc.) que el compilador recopiló. Por supuesto, la anotación para @Type es recursiva. – Ingo