로깅 목적으로 Object [] 배열의 제네릭 메소드의 모든 메소드 매개 변수를 수집합니다. 나는이 더 나은 측면을 사용하여 달성되는 것을 알고 있어요,하지만 그것을 사용하는 허용하고와Object [] 배열의 모든 메소드 args 수집
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);
}
}
}
에 의해 매개 변수의 수업을받을 수 있나요? –
또 다른 foo가 주어지면 다른 서명'foo (double d) {logMyParms (this); ...}'. 'logMyParms (this)'가 어떻게 쓰여지는지 묻고 있습니까? –