静态方法中变量的永久更改

时间:2014-12-27 19:49:46

标签: java class variables methods static

让我们说我有一个静态方法的公共类,其中一个例如:

 public static void test(boolean b){
   b = !b;
 }

让我们说这个班级名是Test。从另一个类,我有一个变量boolean a = false,我调用

 Test.test(a);

如何永久更改它,而不仅仅是在静态方法范围内更改?

6 个答案:

答案 0 :(得分:2)

使更改永久化的唯一方法是让方法具有返回值并将其分配给变量:

public static boolean test(boolean b){
   return !b;
}

a = Test.test(a);

答案 1 :(得分:0)

使用静态字段:

public static boolean flag;

public static void test(boolean b){
    flag = !b;
}

然后:

boolean a = true;
Test.test(a);

System.out.println( Test.flag); // false

答案 2 :(得分:0)

在您的Test课程中,您可以将布尔变量定义为 static

public static boolean a;

并在课外使用Test.a=false;a=Test.a

更改或访问它

如果您需要使用方法,可以使用继承隐藏静态方法:

public class HideStatic {     
public static void main(String...args){  
    BaseA base = new ChildB();  
    base.someMethod();        
}  
}  

class BaseA {         
    public static void someMethod(){  
        System.out.println("Parent method");  
    }  
}  

class ChildB extends BaseA{  
    public void someMethod(){  
        System.out.println("Child method");  
    }  
}

答案 3 :(得分:0)

您可以将实例传递给方法并使用setter一次更改更多变量。

public static void updateData(MyClass instance) {
    instance.setX(1);
    instance.setY(2);
}

答案 4 :(得分:0)

我认为你要求call by reference。您可以使用数组在Java中获取它:

public static void test(boolean[] b){
b[0] = !b[0];
}

boolean[] param = new boolean[] {a};
test(param);
a=param[0];
//a changed

这很有效,但很难看。如果您需要返回多个值,请查看the Pair or Tuple结构。

答案 5 :(得分:0)

听起来像是在寻找 Mutable Boolean,其中最简单的是AtomicBoolean

private void changeIt(AtomicBoolean b) {
    b.set(!b.get());
}

public void test() {
    AtomicBoolean b = new AtomicBoolean(false);
    changeIt(b);
    System.out.println(b);
}