我正在查看为了记录目的收集Object []数组中所有通用方法的方法参数。我知道,这是更好地利用方面实现的,但使用它,我不允许,我期待一个纯粹的基于反射的方法,如果可能的收集对象[]数组中的所有方法参数
为了澄清, 假设一个方法调用
class A {
foo(int a, Object b){
}
}
给定一个A的对象实例是否可以在'foo'方法中动态确定传递的参数?我似乎无法找到任何API在java.lang.reflect或注释来确定这一点。
编辑:我目前使用下面的实现进行日志记录。然而,在调用数组之前收集数组中的所有方法参数非常繁琐,并且想知道是否可以以某种方式推断这个参数。我在找比你重写方面
private static final ConcurrentMap<Class, Method[]> METHODS = new ConcurrentHashMap<Class, Method[]>();
protected void log(Class clazz, String methodName, Object[] args) {
Method[] methods = METHODS.get(clazz);
if (methods==null){
methods = clazz.getDeclaredMethods();
METHODS.put(clazz, methods);
}
for(Method method:methods){
if (method.getName().equals(methodName)){
StringBuilder builder = new StringBuilder(methodName + '(');
int i=0;
for (Class type:method.getParameterTypes()){
builder.append(type.getSimpleName())
.append(" [")
.append(args[i++])
.append("] ,");
}
String str = StringUtils.removeEnd(builder.toString(), ",") + ")";
LoggerFactory.getLogger(clazz).info(str);
}
}
}
获取参数类将预期的输出是什么? – 2012-07-27 05:16:09
给出另一个foo,不同的签名'foo(double d){logMyParms(this); ''。你问如何写logMyParms(this)? – 2012-07-27 05:32:43