2012-12-22 31 views
-2

我一直在寻找到一个项目白衣5000+类,那么我认为这在每个等级:爪哇 - 全局变量VS全局方法

private static int foo = 1; 

private static void setfoo(int value) 
{ 
    foo = value; 
} 

private static int getfoo() 
{ 
    return foo; 
} 

所以,我想为什么不使用全局变量,如果设置反正是静态的。

全局方法和变量之间存在资源使用差异吗?

谢谢你。

+0

嗯...我想'public'和'static'变量(或者是'public'和'static'的getter)尽可能接近Java中的全局变量。此外,全局变量通常是你想要避免的。 – 2012-12-22 16:57:38

+1

在java中,没有像“全局方法”或“全局变量”那样的东西。一个类可以有静态方法或字段。这就是你刚刚发布的内容。 –

+1

如果这些静态变量是私有的并且它们的访问器也是这样,那么通过getter和setter访问它们没有多大意义。它只是增加了噪音,恕我直言。无论如何,静态可变变量都是一种气味。 –

回答

2

getter和setter是有用的,如果你e.g希望在将来添加验证(或添加记录,或做访问统计或......)

+0

那么,两者是相同的东西?只是不同,如果我想添加一个记录器或功能的东西? –

0

如果的getter/setter存在,总是使用它们。getFoosetFoo有效地定义了名为“Foo”的属性,它在概念上与变量foo不同。 foo只是保存该属性当前值的变量,可以视为属于属性。

请记住,虽然属性不必只是获取/设置其支持变量。它也可以在设置之前验证您传入的值。它可以同步对变量的访问。并且/或者将来,setter可能会改变其他事物的特性,并且getter可以返回另一个事物的当前状态,甚至不需要备份变量。通过直接设置变量,您可以在属性被/将被更改为将来执行任何操作的情况下创建兼容性问题。

但是,如果你知道setFoo做(和,在不久的将来,仍然会做),不外乎设置一个名为foo变量,然后它会实际上是更好的有一个getter /二传手。他们不是更清洁,更可读的,他们当然不是更有效率; a = 3; doStuffWith(a);击败setA(3); doStuffWith(getA());。他们的缺席让你摆脱了只需要变量的财产的概念包袱。只有在需要的时候才添加吸气/吸气器(或者肯定会很快需要)属性可以提供的特殊行为。 但是一旦你添加了它们,到处都可以使用它们。

+0

我同意访问者是公开的,但他们是私人的。因此,代码中的更改只会影响类本身。 –

+0

@JBNizet:不会更改代码不再与*本身兼容的情况,并且您必须先更改一百个不同的'foo = 1;'s到'setFoo(1);'s在'Foo'背后实施一些特殊的行为。 :P吸气和吸气已经在那里;他们应该被使用。 – cHao

+0

那么,你是否建议我们不应该直接从定义它的类内部访问任何私有变量,而是始终使用getter/setter?我更喜欢现在拥有干净可读的代码,并且只在需要时重构它,而不是现在混淆我的代码,以防将来发生某些事情。 –

0

字段和getter和setter都是私有的和静态的。这意味着它们的预期目的是仅在类中使用。所以如果你在一些所有类别可访问的地方创建它(全局访问),那么另一个公共类也必须跟踪每个类中的字段,它在被使用之前必须被初始化为一些值(在你的情况下它的1我感觉)。此外,你将不得不使这个代码相互排斥,以保持它始终正确(如果调用5000次,真的会使它变慢)..把你的电话..它的一切都取决于你..