我知道在 Java 中,有人可以通过声明来在接口中包含常量public static final
。但是,假设我有一个名为 的接口,I
它只包含公共静态最终常量,没有方法签名,还有一个名为C
. 为什么我要在 C 中实现 I?即我为什么要执行以下操作:
public class C implements I
由于常量是公共的和静态的,我不能直接通过 访问它们I
吗?
这种(反)模式很有用,因为它允许您使用这些常量的名称,而不必在它们前面加上I.
. 这曾经是一种常见的技术,但现在您可以使用它import static
来导入常量,就像它已经失宠一样。避免它的原因之一是常量集实际上不是一个接口——它只是一堆值——并且让它成为一个接口可以让你做一些奇怪的事情,比如写作
ConstantInterfaceWithNoMethods m = new ClassImplementingThatInterface;
或者
if (m instanceof ConstantInterfaceWithNoMethods)
在这种情况下这是没有意义的。
希望这可以帮助!
这是一种 Java 模式,允许您从接口访问常量,而无需一遍又一遍地键入该接口的名称。这种模式从早期就已经存在,在enum
s 进入语言之前很多年。
有些人认为这是有问题的,因为它会导致创建不指定合同的接口。
一般不需要。一个原因可能是,该接口I
是“标记接口”。