[英]Dynamically monitoring java object field and method return values
我正在尝试开发一个模拟应用程序。 我需要监视模拟环境中的所有java对象。 在执行仿真期间,在每个刻度中会定期调用用户定义的对象方法。 我想跟踪所有对象的所有字段值和方法返回值。 例如,
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值都会更改)。 当我使用反射调用方法时,该方法的执行将被执行两次。 因此,我需要处理不同的方法调用。
我提到我需要像JAVA Debugging API这样的监视机制。 我如何在执行仿真过程中做到这一点。我需要观察所有字段和方法返回值,例如执行中的调试代码。
任何想法。
谢谢你的想法
如果我正确理解您的要求,则希望在调用带有注释的方法后捕获原始字段值的变化。
有许多可能的解决方案,具体取决于客户端代码的简单程度,要编写的框架的复杂程度以及实际需要执行的操作。 这里有一些想法:
Map<String,Object>
而不是原始字段中的方法; 他们提供了Map
的子类来记录更改,并且您的代码可以简单地询问对象自上次调用以来发生了什么更改 最后两个选项的实现并非易事,因此我强烈建议您首先考虑第一个选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.