我应该避免使用STATIC vaiables
我在我的办公室设计了一个包含4000多个常量的java API(不是API)。所以所有的团队都可以直接使用它们。最初我想根据它们的类型创建它们的类,并将它们的静态对象创建为一个单独的类。所以任何人都可以直接使用它们。我应该避免使用STATIC vaiables
但是在阅读need of static variable之后,我担心这可能是创建这么多静态变量的问题。有没有其他的?
*以后我加入这个项目的人也可以在我的Constant类中添加一个约束而不关心性能。有可能许多常量很少被使用。
* Constant类的每个成员都将代表一个具有自己行为的类。它可能是一些继承树的一部分。所以使用枚举可能不是一个好主意。
您想要创建一个4000多个常量所在的位置。这个类的用户可能会添加常量(可能在运行时)?T
关注静态内存问题是错位的。如果你需要4000个值,他们将不得不住在某个地方,对吧?
如果人们会在运行时添加值,这听起来像是某种单一的Map或Properties(它实际上只是一种映射)。人们经常使用像Spring或Guice这样的依赖注入框架来管理这类事情。
如果您只是要添加编译常量,您可以使它们都是静态的。你可能也想让它们成为static final,它们将被内联编译。
这很可能是4000个常量是一个非常糟糕的主意。在那里我看到在一个地方定义了大量常量(> 100,甚至是)的系统,通常会发生的情况是人们忘记了它们的定义并最终使用自己的变体,这种变体会影响目的(例如,我在一个系统上使用了一个在“Queries”类中定义的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 }
你更愿意一起工作?
性能不太可能成为这个设计的问题。 RAM很便宜。 (提示通常的引用:不成熟的优化是所有邪恶的根源)
另一方面,我不太确定任何客户端开发人员如何记住和使用4000多个常量。你能告诉我们这是什么样的对象吗?
根据您未提供给我们的详细信息,您可能会发现将常量收集到enum
s很有用。无状态枚举可以比public static final
变量更容易理解,如果有一些自然分组可以利用。
当你在静态分配时会发生什么,它肯定不会在应用程序的运行时释放。
那又如何?
如果您没有将它们创建为静态,那么它们将通过类的每个实例进行复制。
你不想做的事情是设置静态海量数据,如图像或图形用户界面 图像占用了很多比字段;
4000的一定的常数INT(4个八位字节)= 16000个八位组连的图标^^
的大小我想指出HTE的Javadoc证明我点
这是在Java中的KeyEvent删除,检查出声明^^
常量类将有一些对象的值域可以是int,float,long,string,double,char等 – noquery 2011-06-06 04:34:55
除非你正在创建大型数组或很长的字符串,4000数据值不会是很多的内存。我认为你引用的这篇文章谈论的数据量更大。
另一种方法是从首选项文件中读取值。
也许这些常量被模块化为一个类的集合,所以更少使用的类只会根据需要加载。
我以为是一样的。根据性能会很好,因为它需要额外的IO操作。 – noquery 2011-08-10 08:36:23
我的意思是“添加更多常量”是,一旦我完成它(维护阶段),该项目将在其他开发人员下进行。如果有新的需求(或变化)出现,他们可以添加更多的常量而不关心性能。所以我想以这样的方式设计这个项目,他们至少想过一次为什么我这么做。 – noquery 2011-06-06 04:38:25