我正在查看爲了記錄目的收集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