2012-07-27 74 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(); 
相關問題