2012-07-27 59 views
2

我正在查看为了记录目的收集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); 
     } 
    } 
} 
+0

获取参数类将预期的输出是什么? – 2012-07-27 05:16:09

+0

给出另一个foo,不同的签名'foo(double d){logMyParms(this); ''。你问如何写logMyParms(this)? – 2012-07-27 05:32:43

回答

1

Object<Object>[],其他任何建议/库/​​覆盖每个对象的toString()方法,你需要进行日志记录。

2

您可以通过此

Class aClass = ...//obtain class object 
Method method = aClass.getMethod("doSomething", null) 
Class[] parameterTypes = method.getParameterTypes(); 
相关问题