我正在研究一个包含 5000 多个课程的项目,然后我在每个课程中都看到了这个:
private static int foo = 1;
private static void setfoo(int value)
{
foo = value;
}
private static int getfoo()
{
return foo;
}
所以,我想为什么不使用全局变量并设置它,如果无论如何都是静态的。
全局方法和变量之间存在资源使用差异吗?
谢谢。
我正在研究一个包含 5000 多个课程的项目,然后我在每个课程中都看到了这个:
private static int foo = 1;
private static void setfoo(int value)
{
foo = value;
}
private static int getfoo()
{
return foo;
}
所以,我想为什么不使用全局变量并设置它,如果无论如何都是静态的。
全局方法和变量之间存在资源使用差异吗?
谢谢。
如果您想在将来添加验证(或添加日志记录,或进行访问统计或...),Getter 和 Setter 很有用
如果 getter/setter 存在,请始终使用它们。 getFoo
并setFoo
有效地定义一个名为“Foo”的属性,它在概念上与您的 variable 不同foo
。 foo
只是持有该属性当前值的变量,可以认为属于该属性。
但请记住,属性不必只是获取/设置其支持变量。它还可以在设置之前验证您传入的值。它可以同步对变量的访问。和/或将来,setter 可能会改变其他事物的特性,而 getter 可以返回其他事物的当前状态,甚至不需要支持变量。通过直接设置变量,您会在将来/将要更改属性以执行任何操作的情况下创建兼容性问题。
但是,如果您知道setFoo
除了设置一个名为 的变量之外什么都不做(并且在不久的将来仍然会这样做)foo
,那么实际上最好没有getter/setter。 它们不是更干净、更易读,当然也不是更有效;a = 3; doStuffWith(a);
在所有方面都节拍setA(3); doStuffWith(getA());
。他们的缺席让你摆脱了只需要一个变量的属性的概念包袱。仅当您需要(或肯定很快需要)属性可以提供的特殊行为 时才添加 getter/setter 。但是一旦你添加了它们,就可以在任何地方使用它们。
字段、getter 和 setter 都是私有的和静态的。这意味着它们的预期目的只能在类中使用。因此,如果您在某个所有类可访问的地方(全局可访问)创建它,另一个公共类那么您也必须跟踪该字段,因为在每个类中它必须在使用之前初始化为某个值(在你的情况下它1 我觉得)。此外,您必须使此代码互斥以始终保持正确(如果调用 5000 次,它真的会变慢).. 接听您的电话.. 一切由您决定..