4

所以我知道如何引用来自不同类的变量,但我想知道是否值得我创建一个 Vars.class 来容纳我所有的全局变量。

如果我需要在以后更改它们,这将使我更容易但是,我想知道这是否是一个坏主意?引用不同类的 var 是否需要更长的时间?

谢谢

编辑:当我说“全局变量”时,我的意思是“全局常量”。为混乱道歉。我希望它们可以从其他类中引用,但它们不会即时更改。

变量.java

package test;

public class Vars
{
    static int variable1 = 16;
    static int variable2 = 32;
}

启动.java

package test;

public class Start
{
    public Start()
    {
        int i = Vars.variable1;
    }
}
4

5 回答 5

7

所以我知道如何引用来自不同类的变量,但我想知道是否值得我创建一个 Vars.class 来容纳我所有的全局变量。

不,值得一开始就避免使用全局变量。变量应该代表特定对象的状态——因此根据有用对象的合理边界对变量进行分组,然后确保每个对象都知道它需要依赖的任何其他对象。

如果你要抛弃面向对象,那么使用面向对象的语言就没有什么意义了。

花时间在你的应用程序中找出适当的类型无疑会比仅仅拥有全局变量在短的时间内更慢......但它会让你的代码容易维护和测试。

至于性能:你担心太早了。变量的访问时间几乎不会对性能产生重大影响。以最简单的方式设计您的代码。确定性能指标和验收标准。查看您的代码是否已经满足这些条件。如果没有,请找出原因并执行最干净的更改以提高性能(始终测量)。

此外,变量本身应该几乎总是私有的:存储是一个实现决策;考虑如何以及是否通过方法暴露状态。

于 2012-09-27T11:34:09.030 回答
3

全局变量是个坏主意。网上有很多关于他们的文章。是一个很好的

如果要处理全局常量

例如

public static final Integer MY_CONSTANT = 1;

那么我仍然会将常量放在与之相关的类中。我不会亲自设置变量类。尝试将您的代码封装起来,以便变量尽可能接近使用。

于 2012-09-27T11:48:20.530 回答
2

答案是否定的。如果您考虑过安全性,那么就没有功能缺陷。

于 2012-09-27T11:34:20.050 回答
0

全局变量是个坏主意。

但是,如果我以后需要更改它们,这将使我更容易

也许你需要常量?如果您认为需要更改它们,将所有常量放在一个位置是有意义的。对常量使用 use public static final:

package test;

public class Constants
{
    public static final double EPSILON = 0.001d;
}

package test;

public class Start
{
    public Start()
    {
        ...
        if(arg1 - arg2 < Constants.EPSILON)
        ...
    }
}
于 2012-09-27T11:43:30.567 回答
0

我更喜欢让常量靠近使用它们的类或类。没有包罗万象的对象;没有接口。

如果大量对象需要对象或值,我会考虑用 DI 工厂注入它们。

如果值发生变化,我会考虑将它们放入数据库并作为配置访问它们。

除了你所提议的任何东西。

于 2012-09-27T11:45:18.080 回答