当前位置: 首页 > 知识库问答 >
问题:

类中的静态最终字段与java中的接口字段

车明贤
2023-03-14

我需要在我的应用程序中创建100个或更多的静态最终常数,我可以通过以下两种方式实现这一点:

  1. 创建一个简单的java并在该类中创建静态最终字段
  2. 创建接口时应将所有变量放入其中,因为接口中的所有字段都是隐式的静态的最终的

在上述方法中,我有以下问题:

  1. 哪种方法是实现这一目标的正确方法

共有3个答案

亢建木
2023-03-14

你有没有考虑过ENUM的方法,或者它不适合你的情况?我认为,与常量相比,ENUM的方法可以给你带来一些好处。

为什么使用ENums而不是常量?

谈萧迟
2023-03-14

我不会考虑它们是否应该在接口或类中,而是更多地考虑常量及其含义。

我不建议为了把它们放在一起而把所有常数放在一个地方。例如,如果一个常量与一个类直接相关,那么我们会说把它放在那个类中。我曾经使用过将所有常量绑定到一个类中的代码,我认为这不是一个好方法

梁修贤
2023-03-14

你可以参考许多关于这个话题的书。

我将引用一个很好的例子:“有效的Java”

第19项:仅使用接口定义类型

常量接口模式是对接口的不当使用。类在内部使用某些常量是一个实现细节。实现常量接口会导致此实现细节泄漏到类的导出API中。对于类的用户来说,该类实现一个常量接口并不重要

您甚至可以检查JDK大部分常量声明的位置...

数学。例如,PI在类Math中声明,而不是在接口中声明

作为一个例外,您可以看到java中的常量。木卫一。ObjectStreamConstants,但这些书也有帮助:

再次从有效java:

Java平台库中有几个常量接口。。。

这些接口应视为异常,不应进行仿真。

 类似资料:
  • 我有一个抽象类的许多子类,每个子类都声明了一个同名的公共静态final字段。我在考虑在抽象超类中包含这个字段,而不初始化它,并希望每个子类都能被强制初始化它。 我之所以这么想,是因为抽象类的所有子类都声明了一个名为UNIQUE_ID的公共静态最终字符串字段,并且每个子类都有必要声明一个具有该名称的字段。 我希望我的问题足够清楚,如果不清楚,请告诉我。 能不能做一些和这个差不多的事情? 编辑:添加代

  • 问题内容: 使用JavaDoc,如何在类中引用最终静态字段的值? 我希望在此示例中将其替换为field的值。 问题答案: 你的意思是?

  • 我们正在开发基于spring boot 2.5.6的支付应用程序。该应用程序托管在docker上,并在Java14上启动。我们创建了一个名为的抽象类,它是,包含两个变量和。所有枚举类都扩展了这个基类,并在其中定义常量。 这个决定是为了定制整个应用程序层中使用的枚举。你可以在下面看到一个例子: 该类在实体层中用作嵌入变量,如下所示: 系统工作得很好,但是发生了一些错误,ShapeEnum的字段。RE

  • 问题内容: 我正在查看一些开放源代码的Java项目以进入Java,并注意到其中许多具有某种“常量”接口。 例如,processing.org有一个名为PConstants.java的接口,大多数其他核心类都实现了该接口。该接口充满了静态成员。是否有这种方法的原因,或者这被认为是不良做法?为什么不使用有意义的枚举或静态类呢? 我发现使用接口允许某种伪“全局变量”很奇怪。 问题答案: 通常认为这是不好

  • 问题内容: 让我们从一个简单的测试用例开始: 任何人都在乎猜测什么将作为输出打印(在底部显示,以免立即破坏惊喜)。 问题是: 为什么原始和包装的整数表现不同? 为什么反射访问与直接访问返回不同的结果? 最困扰我的人-为什么String表现得像原始的而不是像? 结果(java 1.5): 问题答案: 内联编译时常量(在javac编译时)。参见JLS,尤其是15.28定义了常量表达式,而13.4.9讨

  • 问题内容: 我尝试了解通过引用同一封闭类对象初始化静态字段时初始化顺序的行为。 上面这段代码的输出是: 如果我将变量修改为除plain之外的其他任何内容: 输出为: 为什么会这样呢? 请注意,即使同时声明了两者,输出也是如此,在这种情况下,声明之前 问题答案: 静态最终成员先于其他静态成员初始化。 非最终静态成员按出现顺序初始化 因此,在您的第一种情况下: 构造函数在初始化之前首先被调用,因此被显