Java 调用访问器方法的良好实践?
如果这个问题很愚蠢,请原谅我…我是一个编程新手。我感到困惑的一件事是,我是否应该在每次调用获得某个值的方法时实例化一个新变量,或者保留一个本地副本并更新它 举例来说,假设我有一个机器人在迷宫中导航。机器人驾驶员操作机器人,并且必须获得机器人的坐标以执行某些操作,例如感知障碍物Java 调用访问器方法的良好实践?,java,Java,如果这个问题很愚蠢,请原谅我…我是一个编程新手。我感到困惑的一件事是,我是否应该在每次调用获得某个值的方法时实例化一个新变量,或者保留一个本地副本并更新它 举例来说,假设我有一个机器人在迷宫中导航。机器人驾驶员操作机器人,并且必须获得机器人的坐标以执行某些操作,例如感知障碍物 public class RoboDriver { public void senseObstacle() { int[] position = robot.getPosition(); ...
public class RoboDriver {
public void senseObstacle() {
int[] position = robot.getPosition();
...
}
}
public class RoboDriver {
int[] robotPositionCopy;
public void senseObstacle() {
this.robotPositionCopy = robot.getPosition();
...
}
}
机器人对象中的位置坐标始终是最新的。如果我想得到最新的职位,这两个例子中哪一个更好,为什么?或者它没有太大区别吗?一个人没有实例化一个局部变量,你的话让我觉得你可能认为这是有代价的。局部变量是绝对自由的:它们只是给定给内存位置的名称,内存位置无论如何都会存在于方法的堆栈框架中
与此相反,您的第二个示例声明了一个实例变量,而这一变量是有代价的:类的每个实例都必须在堆上为它保留内存,即使您仅在执行方法时使用它
因此,我认为建议是一致的:不要声明实例变量,除非你需要它们来保存长期存在的对象状态。这取决于你需要如何/何时使用这些信息。@DaveNewton在这种情况下,我只需要在RoboDriver试图感测某些东西时更新的坐标。所以每次调用sense时,它都需要更新的坐标。您可以同时使用这两种坐标。但是,第二种方法将使数组对象在内存中的保存时间通常比局部变量长。@Mohammad因此,就性能而言,第1种方法稍好一些?@Renren29那么可能没有理由将其保存在
RoboDriver
实例变量中(与第一个示例中的局部变量相反)。