如何动态更改方法内的对象属性

时间:2017-11-03 01:26:36

标签: java parameter-passing

我有这个问题,因为我正在尝试让我的程序“更好”:P

class GlobalVariables {

    int att1;
    int att2;
    int att2;...

我正在使用该课程来处理我在程序中需要的几乎所有全局价值。

此类GlobalVariables包含许多属性,每个属性都是从传感器检索到的,可以从method3更改,这是一种验证方法,可以将某些值保留在一个范围内。

在Main类中,我有一个另一个类的对象(比方说class2)。

这个对象(比方说car)有一个方法:

car.method(gl)

glGlobalVariables的实例。

现在,在内部方法中,我致电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

2 个答案:

答案 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,那么请为您创建一个新方法 如果你不这样做,那么你就违反了一些规则。在这种情况下,你打破了封装。