[英]Static final field in a class vs Interface field in java
我需要在我的应用程序中创建 100 个或更多静态最终常量,根据我的理解,我可以通过以下两种方式实现:
class
并在其中创建static
final
字段static
final
我在上述方法中有这些问题:
您可以参考许多有关该主题的书籍。
我会引用一个很好的:“Effective Java”
第 19 条:仅使用接口来定义类型
常量接口模式是接口使用不当。 一个类在内部使用一些常量是一个实现细节。 实现一个常量接口会导致这个实现细节泄漏到类的导出 API 中。 类实现常量接口对类的用户没有任何影响
您甚至可以检查 JDK 中大多数常量的声明位置。
例如Math.PI
在类 Math 中声明,而不是在接口中
作为一个例外,您可以在java.io.ObjectStreamConstants 中看到类似的常量,但这些书籍同样可以提供帮助:
再次从有效的java:
Java 平台库中有几个常量接口......
这些接口应被视为异常,不应进行仿真。
我不会考虑它们是否应该在接口或类中,而是更多关于常量及其含义。
我不建议为了将它们放在一起而将所有常量放在一个地方。 例如,如果一个常量与一个类直接相关,那么就会说把它放在那个类中。 我曾经使用过将所有常量捆绑到一个类中的代码,我认为这不是一个好方法。
您是否考虑过使用 ENUM 的方法或它不适合您的情况? 我认为,使用 ENUM 的方法可以为您提供一些优于常量的好处。
我认为方便的方法是将它们放在一个地方,如果它们具有共同的性质。 无论如何,它们应该按某种属性分组。 您可以像这样为他们创建类:
public final class Consts {
public static class GroupA {...}
public static class GroupB {...}
//and so on
}
通过组,这个类变得更具可读性,并且更易于管理。 关于内存消耗,尝试为常量使用原语,因为它们不需要额外的元信息空间。
您可以通过在接口类中声明字段来随意创建最终或静态约束,因此我想使用您的选项编号 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.