Java常量文件
回答
它被认为在Java中不好的做法,大多数面向对象语言,简单地定义一个类来保存常量。定义它们关联的类中的常量要好得多。通常有一个。例如
interface MyComponent {
/** The default height for a component */
public static final int DEFAULT_HEIGHT = 5;
// other stuff
}
如果真的没有人可以自由地定义一个单独的类。
编辑:这里的关键事情是:
- 让常量容易找到。如果有“自然”放置它们的地方,将它们放在那里(即Component对象的默认高度属于Component类)。
- 不要有比你需要更高的耦合。将所有常量放在一个'常量'类中可以实现高耦合,特别是随后的修饰符倾向于将所有常量放入常量类中,而不管是否有另一个类可以自然放入。
- 仅因为常量被多个类使用,并不意味着它应该在'常量'类中。如果“应用程序”和使用应用程序类的类使用常量,则将其放入应用程序类中。这样你就不会增加耦合。
通常情况下,你会使用一个常量类,或者在它们用于类定义它们,一拉:
class Constants {
public static final int NUM_TRIANGLES = 4;
public static final String SOME_TEXT = "This is a constant";
}
然后,你指的他们是:
String inst = Constants.SOME_TEXT;
我知道你刚才展示的例子,但我想强调一个不应该使用CONST_作为常量的前缀。 ALL_CAPS是指示常量的标准方式。 – 2010-10-05 17:41:46
你也可以把它变成一个接口而不是一个类。 – 2010-10-05 17:42:22
对,这只是一个例子,如果他来自C/C++(这是我的问题),可能让人想起提问者的背景。 – billjamesdev 2010-10-05 17:44:02
访问枚举是相当慢的操作,与局部变量或“静态最终”(据我所知是由java编译器内联编译)相比。当涉及内存/空间使用情况时,枚举器的开销也相当高。请参阅http://developer.android.com/guide/practices/design/performance.html#avoid_enums – Tseng 2010-10-05 19:23:18
最常用的方法是在类创建“constants”是你需要他们:
class Example {
private static final int FILENAME = "test.txt;
}
而不是私人也可以宣布default,保护或公开。尽管定义常量被认为是OO anti pattern是一个特殊的“常量”(God)类,它存储了整个应用程序的常量。或者,您也可以将配置数据存储在Java properties file中,这不被视为反模式。
另一种快速普及的选择是使用Dependency Inject(DI)模式。这个模式通常用于依赖对象,但它也可以用于将常量值注入到对象中。例如,这可以与谷歌的轻量级Guice DI框架来实现:
class Example {
String filename;
@Inject
public Example(@ConfigFilename String filename) {
this.filename = filename;
}
在一个特殊的Binder类,你会绑定一个值与@ConfigFilename注释的字符串。这样,您可以进行独立测试的最小耦合和类。
如果我在Android上使用属性文件。我可以放在哪里? – VansFannel 2010-10-06 06:09:17
有几种方法,例如从类路径(具有类的目录)中读取属性文件:http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html – Kdeveloper 2010-10-06 17:57:16
Dagger也很酷https://github.com/square/dagger – Caipivara 2015-01-27 16:29:59
- 1. 在文件中读入常量#java
- 2. Swift常量文件?
- 3. 字符串文字与java中的常量文件
- 4. Java文件IO异常
- 5. Java文件通道异常
- 6. 元框架/常量文件?
- 7. Java中的大量常量
- 8. 类的常量和文件导入为java
- 9. 从常量java文件注入spring bean中的值
- 10. 从JNI(Java Native Interface)访问C常量(头文件)
- 11. 什么是使用错误在Java中的常量文件?
- 12. Java执行批量文件
- 13. 从常量类文件中访问常量
- 14. Java图标常量 - 静态常量是否正常?
- 15. 的Java 8常量池常数依赖
- 16. JSP中的Java常量
- 17. 常量轮询或Java RMI?
- 18. Java - 常量类设计
- 19. Java可扩展常量
- 20. Java包含的常量
- 21. Java中的字母常量?
- 22. 在Java中重写常量
- 23. 未找到Java文件异常错误
- 24. Java-空指针异常,文件输入?
- 25. Java重定向异常到文件
- 26. FileNotFoundException异常的java文件的Android
- 27. 文件未发现异常 - Java的
- 28. 变量等于Java中的常量
- 29. JS文件里面的PHP常量
- 30. 休眠映射文件中的常量
有趣的是,我刚刚读到变量和常量不应该在代码可读性的界面内。我同意这一点,因为我认为好的命名和'Constants'类更好,因为大多数常量将用于不同的类。如果您使用常量来“配置”应用程序,那么也可以在一个地方使用任何东西 – WarrenFaith 2010-10-05 19:59:19
变量不能位于界面中。我相信,如果它们与实现接口的所有类相关,常量应该是。如果你的常量被所有的类使用,那么是的,把它们放在一个常量类中(如上所述)。如果它们用于配置应用程序,那么它们可能属于Application类。他们关键的问题是让他们很容易找到,而不是与任何阶层有很高的联系。如果不小心处理,Constants类往往会非常耦合。 – DJClayworth 2010-10-05 20:41:14