【问题标题】:Alternative to delcare global variables in Java [closed]在Java中声明全局变量的替代方法[关闭]
【发布时间】:2014-06-12 02:21:47
【问题描述】:

看了global-variables-in-java,发现不建议声明全局 变量。但是,如果我想声明所有类中的所有方法都可以查看的常量变量,那么有什么更好的方法。如何使这些变量的范围全局化?如何以及为什么,谢谢!

【问题讨论】:

  • 为什么该问题的答案对您不起作用?听起来你在说“我发现不建议声明全局变量,但我还是想声明它们。我该怎么做?”
  • 如果它不是静态的,就无法访​​问它,而是将全局类的每个实例传递给要访问它的每个类。
  • 可能没有声明全局变量?如果没有更多的上下文,很难说什么是“更好”。
  • 添加您需要替代方案的代码示例以及您认为需要替代方案的原因。
  • Java没有全局变量,但是有静态字段,基本一样。

标签: java class scope constants global


【解决方案1】:

如果我想声明所有类中所有方法都可以查看的常量变量

如果这些确实是常量,那么 public static final 字段就可以了。

这是什么数据?它是否需要外部可配置(在运行时或构建时)?是否需要在应用程序启动时计算?该计算是否需要可能不可用或速度较慢的外部资源(例如文件或网络)?

嗯,变量表示状态,处于不同的绘图状态(绘制,擦除......)。

不确定我理解这到底是什么意思,但也许你想定义一个enum

我不想每次都传递很多参数

这是使用全局变量的错误论据。

也许您想在一个持有者对象中组合多个参数?

或者拥有带有方法的有状态对象(与采用许多参数的无状态函数相反)。

但是我还是要new一个包含这些常量的类。

没有。你可以这样做

 public final class MyConstants{

       public static final String MY_OAUTH_KEY = "ABCDEFGH";

       // maybe this should come from pom.xml 
       public static final String APP_VERSION = "0.0.1";

 }

然后在代码中的任何地方使用它

 System.out.format("You are running version %s%n", MyConstants.APP_VERSION);

【讨论】:

  • 但是我仍然需要新建一个包含这些常量的类。因此其他班级可以查看它。它和全局变量有什么区别?
  • 嗯,变量表示state,处于不同的绘图状态(绘制,擦除......)。我不想每次都传递很多参数。请问如果提到数据作为您的答案(外部可配置......),它会影响设计吗?我真的不明白你在答案中提到的情况是什么:externally configurableapplication startup 等等。
  • 这有点模糊。我们需要看一些实际的代码。
  • 好的,你有没有遇到这个解决方案不合适的情况? (你可以给我源码或者相关链接,我会研究再问)我只是想了解更多。
猜你喜欢
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 2016-07-09
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
相关资源
最近更新 更多