Digamos que tengo una situación como esta:Ver anotaciones Java en una llamada al método
public String method(String s) {
return stringForThisVisibility(s, EnumVisibility.PUBLIC);
}
y quiero reemplazarlo con una anotación de esta manera:
@VisibilityLevel(value = EnumVisibility.PUBLIC)
public String method(String s) {
return stringForThisVisibility(s);
}
Ésta parece ser una mejor y una solución más clara, pero necesito el método stringForThisVisibility para conocer el valor de @VisibilityLevel con algún tipo de reflexión. ¿Es eso posible? ¿Puedo ver las anotaciones sobre el método que llama a stringForThisVisibility?
Esa es la única solución que yo sé, también. No es que no se garantice que funciona en todas las situaciones: si el cargador de clases que cargó la clase llamada no conoce la clase de llamada (y ninguno de sus cargadores de clase padre lo hace), la llamada a 'Class.forName()' fallará. –
Así que dices que quizás es mejor estar satisfecho con la primera solución ... – Fabio
esta técnica es frágil (¿y si tu método no fuera invocado directamente desde un método anotado? Tendrías que recorrer la pila. ¿Qué ocurre si la anotación ¿está en un método de superclase y no en el método de llamada directamente? Tendría que pasar por encima de las superclases ...) y si Philipp tiene razón, podría estropearse para entornos complejos (j2ee? osgi?). también es muy lento puede optar por una solución que utiliza un marcador ThreadLocal y establecer el marcador antes de llamar al método, pero que también se vería raro. tal vez si pudieras describir qué es exactamente lo que estás tratando de hacer, se puede encontrar una solución elegante – radai