【发布时间】:2017-11-03 01:26:35
【问题描述】:
我有这个问题,因为我正试图让我的程序“更好”:P
class GlobalVariables {
int att1;
int att2;
int att2;...
我使用该类来处理我在程序中需要的几乎所有全局值。
此类GlobalVariables 包含许多属性,每一个属性都是从传感器检索的,并且可以从method3 更改,method3 是一种将某些值保持在范围内的验证方法。
在 Main 类中,我有一个 another 类的对象(比如说class2)。
这个对象(比如说car)有一个方法:
car.method(gl)
gl 是GlobalVariables 的一个实例。
现在,在方法内部,我调用method2,在内部调用method3(均来自class2)。
this.method3 (int att1, int att2, int att3,)
this.method3 (int att2, int att3, int att1,)
this.method3 (int att3, int att1, int att2,)
目前,我们有很多method3 的调用,这3 个参数可以是这些传感器值的组合,因此att1 可以说是att37。
所以method3的声明是这样的:
public void method3 (int n1, int n2, int n3){
n3=n1+n2;
}
当 Java 只允许我们按值传递值时,我应该怎么做才能更改 globalVariable.attXXX。
我当然可以再制作 2 个方法并调用相应的方法并使用 SET,但我认为这几乎是我想要避免的。
当我说 SET 时,我指的是 SETTER
【问题讨论】:
-
只需返回该值并在调用站点上分配。
-
如果它们是 global(在 OO 编程中必须避免的),那么你可以写
gl.att1 = 1。或类似的东西。然后您应该将您的方法3更改为:public void method3( GlobalVariables g){ g.att3 = g.att1 + g.att2; }。 -
这不是一个好主意。请不要进一步采用这种方法,尤其是在您发现反射时。要么将它们公开,要么为每个字段编写 getter 和 setter。
-
也许,只是也许您在解决问题时采用了错误的方法。很高兴了解您的真正问题(和代码),因此我们可以更好地指导您采用另一种方法。
-
而且,当然,你可以制作一个setter并传递它(setter方法)