6

我知道在 Java 中,有人可以通过声明来在接口中包含常量public static final。但是,假设我有一个名为 的接口,I它只包含公共静态最终常量,没有方法签名,还有一个名为C. 为什么我要在 C 中实现 I?即我为什么要执行以下操作:

public class C implements I

由于常量是公共的和静态的,我不能直接通过 访问它们I吗?

4

3 回答 3

10

这种(反)模式很有用,因为它允许您使用这些常量的名称,而不必在它们前面加上I.. 这曾经是一种常见的技术,但现在您可以使用它import static来导入常量,就像它已经失宠一样。避免它的原因之一是常量集实际上不是一个接口——它只是一堆值——并且让它成为一个接口可以让你做一些奇怪的事情,比如写作

ConstantInterfaceWithNoMethods m = new ClassImplementingThatInterface;

或者

if (m instanceof ConstantInterfaceWithNoMethods)

在这种情况下这是没有意义的。

希望这可以帮助!

于 2012-05-15T19:15:41.583 回答
5

这是一种 Java 模式,允许您从接口访问常量,而无需一遍又一遍地键入该接口的名称。这种模式从早期就已经存在,在enums 进入语言之前很多年。

有些人认为这是有问题的,因为它会导致创建不指定合同的接口。

于 2012-05-15T19:15:16.443 回答
0

一般不需要。一个原因可能是,该接口I是“标记接口”。

于 2012-05-15T19:15:15.710 回答