No puede. La reflexión no tiene acceso a las variables locales, incluidos los parámetros del método.
Si desea que la funcionalidad, es necesario para interceptar la llamada al método, que se puede hacer en una de varias maneras:
- AOP (AspectJ/primavera AOP etc.)
- proxies (JDK, CGLib, etc.)
En todos estos, usted reuniría los parámetros de la llamada al método y luego le diría a la llamada del método que se ejecutará. Pero no hay forma de llegar a los parámetros del método a través de la reflexión.
Actualización: aquí hay un aspecto de la muestra para que pueda empezar el uso de validación basada en anotación con AspectJ
public aspect ValidationAspect {
pointcut serviceMethodCall() : execution(public * com.yourcompany.**.*(..));
Object around(final Object[] args) : serviceMethodCall() && args(args){
Signature signature = thisJoinPointStaticPart.getSignature();
if(signature instanceof MethodSignature){
MethodSignature ms = (MethodSignature) signature;
Method method = ms.getMethod();
Annotation[][] parameterAnnotations =
method.getParameterAnnotations();
String[] parameterNames = ms.getParameterNames();
for(int i = 0; i < parameterAnnotations.length; i++){
Annotation[] annotations = parameterAnnotations[i];
validateParameter(parameterNames[i], args[i],annotations);
}
}
return proceed(args);
}
private void validateParameter(String paramName, Object object,
Annotation[] annotations){
// validate object against the annotations
// throw a RuntimeException if validation fails
}
}
No entiendo la pregunta. El valor de 'bar' solo estará disponible durante el tiempo de ejecución. ¿Quieres interceptar llamadas a 'example'? ¿O te refieres al tipo de datos 'Bar'? – home