首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >反射:在运行时从方法的返回类型获取对象状态

反射:在运行时从方法的返回类型获取对象状态
EN

Stack Overflow用户
提问于 2011-10-15 22:00:08
回答 2查看 1.1K关注 0票数 1

我用几个方法注释了Java类:

代码语言:javascript
运行
复制
@CustomAnnotation
public class MyService {

public List<MyObject> getMyObjects(){
...
}

public SomeObject getSomeObject(){
...
}

}

我应该记录MyObjectSomeObject实例的字段值。

MyService对象获取的aspectj部件:

代码语言:javascript
运行
复制
public void logg2(JoinPoint jp) {
    Object target = jp.getTarget();

}

target是包含方法的MyService类。

如何获取运行时MyService类中的方法返回的MyObjectSomeObject实例字段的值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-16 16:50:59

代码语言:javascript
运行
复制
@Around(value = "traceReturnedObjectsFields()")
public Object traceAnotherOne(ProceedingJoinPoint jp) throws Throwable {
    Object res = null;
    res = jp.proceed();
    if (res == null)
        return res;
    Class<?> c1 = res.getClass();
    Field[] fields = c1.getDeclaredFields();
    AccessibleObject.setAccessible(fields, true);
    for (Field field : fields) {
        if (!Modifier.isStatic(field.getModifiers())) {
            System.out.println(field + " = " + field.get(res));
        }
    }
    return res;
}
票数 1
EN

Stack Overflow用户

发布于 2011-10-16 00:06:41

代码语言:javascript
运行
复制
Object target = jp.getTarget();
for (Class<?> superclass = target.getClass();
     superclass != Object.class;
     superclass = superclass.getSuperclass())
{
   Field[] fields = superclass.getDeclaredFields();
   AccessibleObject.setAccessible(fields, true);
   for (Field field : fields)
   {
      if (!Modifier.isStatic(field.getModifiers()))
      {
         System.out.println(field + " = " + field.get(target));
      }
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7778249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档