我正在尝试开发一个模拟应用程序。我需要在模拟环境中监视所有java对象。在执行模拟期间,在每个tick中定期调用用户定义的对象方法。我想跟踪所有对象的所有字段值和方法返回值。例如,
public class Person{
int energy,x,y;
public Person(){
this.energy = new Random().nextInt(0,10);
}
@ScheduledMethod(start=1, interval=1)
void step(){
energy--;
// move random x,y
move();
}
void move(){
this.x= new Random().nextInt(1,50);
this.y = new Random().nexInt(1,50);
} }
在我的模拟器中,追踪并保存每个人的实例能量值,直到人死亡。模拟开发人员通常使用随机函数,因此调用方法两次可能不会返回相同的值,如Person的x,y值。
通过使用反射API,我可以动态访问字段值(可以访问人的能量值。)但我需要访问方法返回值(在移动的每次调用中,人的x,y值都会改变)。当我使用反射执行方法调用方法时,会使用twiced。所以,我需要以不同的方式处理方法调用。
我提到我需要一个像JAVA Debugging API这样的监控机制。如何在执行模拟期间执行此操作。我需要查看所有字段和方法返回值,如执行中的调试代码。
任何想法。
感谢您的想法
答案 0 :(得分:0)
如果我理解了您正确询问的内容,您希望在使用注释调用方法后捕获原始字段值的更改。
有很多可能的解决方案,具体取决于客户端代码的简单程度,以及您想要编写的框架的复杂程度,以及您实际需要执行的操作。以下是一些想法:
Map<String,Object>
中,而不是在原始字段中;他们提供了一个记录变化的Map
子类,你的代码可以简单地询问对象自上次调用以来发生了什么变化最后两个选项实现起来并不重要,所以我强烈建议先考虑第一个选项。