如何通过 setter 方法修改私有静态变量

2022-09-03 17:24:09

我在一个名为 Example 的类中有以下变量:

private static int number;

如果我想使用外部类为变量分配一个数字,我会这样做?

1)使示例中的setter方法成为静态的,这样我就可以像这样访问它:

Example.setNumber(3);

2)或使setter方法非静态,所以我创建一个示例对象来设置数字

Example e = new Example()
e.setNumber(3);

两者之间有什么区别,哪一种更好?


答案 1

在这种情况下,建议使用静态方法。

为什么?好吧,如果你把它变成一个非静态的方法,那将导致以下的增强效果:

Example e1 = new Example();
Example e2 = new Example();

e2.setNumber(3);
e1.setNumber(5);

System.out.println(e2.getNumber()); // surprise! prints 5,     

因此,即使您在 e1 上调用了该方法,e2 也会受到影响。相应的静态示例就不那么令人惊讶了:

Example e1 = new Example();
Example e2 = new Example();

Example.setNumber(5);
System.out.println(Example.getNumber()); // prints 5, no surprise...

答案 2

首先,你真的不应该设置静态变量。它容易引起问题,并且通常表明设计不佳。唯一应该使用静态变量的时间是线程安全的不可变对象和单例。

也就是说,如果您仍然想要设置该值,请使其成为静态方法,因为您不需要实例化对象即可设置静态值。


推荐