我有这个问题,因为我正在尝试让我的程序“更好”:P
class GlobalVariables {
int att1;
int att2;
int att2;...
我正在使用该课程来处理我在程序中需要的几乎所有全局价值。
此类GlobalVariables
包含许多属性,每个属性都是从传感器检索到的,可以从method3
更改,这是一种验证方法,可以将某些值保留在一个范围内。
在Main类中,我有一个另一个类的对象(比方说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
发言。< / p>
所以method3
的声明就像:
public void method3 (int n1, int n2, int n3){
n3=n1+n2;
}
当Java让我们按值传递值时,我应该怎么做才能更改globalVariable.attXXX
。
我当然可以再制作两个方法并调用相应的方法并使用SET,但我认为这几乎是我想要避免的。
当我说SET时,我指的是SETTER
答案 0 :(得分:1)
使用setter方法:
static void setAtt3(int x) { att3 = x; }
void method3(int a, int b, IntConsumer setter) {
setter.accept(a + b);
}
呼叫:
method3(att1, att2, GlobalVariables::setAtt3);
答案 1 :(得分:0)
如果这些是全局的(在OO编程中必须避免的话),那么你可以写gl.att1 = 1
。
然后你应该将你的方法3改为:
public void method3( GlobalVariables g)
{
g.att3 = g.att1 + g.att2;
}
原来,这只是解决你的问题,改变另一个类的对象的价值
请记住您收到的所有评论,并尝试采用新方法解决问题
如果您确实需要更改任何属性的值,则最佳方法是setter
。
根据您的评论,我会建议这样的事情:
public class GlobalVariables {
private int x3;
public void method3( int a, int b ) {
x3 = a + b;
}
}
根据需要为变量创建getter和setter。如果您需要更新另一个变量,例如x2
,那么请为您创建一个新方法
如果你不这样做,那么你就违反了一些规则。在这种情况下,你打破了封装。