我正在办公室设计一个 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/