java - 我应该避免使用静态变量吗

标签 java performance static

我正在办公室设计一个 Java API(不完全是 API),它将包含 4000 多个常量。所以所有的团队都可以直接使用它们。最初我想根据它们的类型创建它们的类,并将它们的静态对象创建到一个单独的类中。所以任何人都可以直接使用它们。

但看了之后need of static variable ,恐怕创建这么多静态变量可能是个问题。有替代方案吗?

*在我之后,无论谁加入这个项目,都可以在我的 Constant 类中添加一个约束,而不用关心性能。许多常量有可能很少使用。

*Constant 类的每个成员都代表一个具有自己行为的类。它可能进一步是某些继承树的一部分。所以使用枚举可能不是一个好主意。

最佳答案

您想要创建一个可以存放 4000 多个常量的位置。此类的用户是否有可能添加常量(可能在运行时)?

  • 对静态内存问题的担忧是错误的。如果您需要 4000 个值,它们将不得不存在于某个地方,对吗?

  • 如果人们将在运行时添加值,这听起来像是某些类型的单例 Map 或 Properties(实际上只是一种映射)。人们经常使用 Spring 或 Guice 等依赖注入(inject)框架来管理这类事情。

  • 如果你只是想添加编译常量,你可以将它们全部设为静态。您可能还希望将它们设置为 static final,它们将被内联编译。

  • 4000 个常量很可能是一个非常糟糕的主意。我见过在一个地方定义了大量常量(> 100,甚至)的系统,通常发生的是人们忘记了它们的定义并最终使用他们自己的变体,这有点违背了目的(例如,我曾在一个系统上工作过,该系统在“查询”类中定义了 100 个 SQL 查询。当然,人们会立即忽略它,因为如果您需要的确切查询在那里,查找起来比自己滚动查询更麻烦. 该类最终增长到大约 1500 个查询,许多完全重复,许多未使用,大多数只使用一次。完全没有意义)。我可以想象在某些情况下您不会“丢失”命名约定的东西,但除非您有这样的用例,否则这似乎是一个真的坏主意。

  • 将您的常量分解为枚举可为您提供类型安全的引用。它还使概念上的事情更容易处理。比较:

-

public class Constants { 
   String WORK_ADDRESS;
   String WORK_PHONE;
   String HOME_ADDRESS;
   String HOME_PHONE;
}

public enum ADRESS{ WORK, HOME }
public enum PHONE { WORK, PHONE }

你更愿意和谁一起工作?

关于java - 我应该避免使用静态变量吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6246957/

相关文章:

java - Couchbase:从静态代码块中初始化需要更长的时间

java - CXF Servlet API方法列出所有服务bean?

java - servlet url 模式与参数问题

c++ - C++ 中读取大型 CSV 文件的性能问题

r - 在 R 中快速计算字符串中的数字

javascript - PageSpeed Insights 在我的网站中检测到渲染阻塞 JS 和 CSS。我该如何解决?

Javascript es6 覆盖静态属性

c# - 如何在c#中将类的静态变量作为参数传递

java - JAXB 比 XSLT 有什么好处?

java - 使用 IntelliJ Idea 进行远程调试