我正在考虑在 Object[] 数组中收集泛型方法的所有方法参数以用于日志记录。我知道使用方面可以更好地实现这一点,但是不允许使用它,并且如果可能的话,我正在寻找一种基于纯反射的方法
为了澄清,假设一个方法调用
class A {
foo(int a, Object b){
}
}
给定 A 的对象实例,是否可以在“foo”方法中动态确定传递的参数?我似乎无法在 java.lang.reflect 或注释中找到任何 API 来确定这一点。
编辑:我目前使用下面的实现进行日志记录。然而,在调用它之前将所有方法参数收集在一个数组中是很乏味的,并且想知道这是否可以以某种方式推断出来。我正在寻找除方面以外的任何建议/库
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);
}
}
}