在接口中定义常量是什么意思?

时间:2012-05-15 19:13:23

标签: java interface constants

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

public class C implements I

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

3 个答案:

答案 0 :(得分:10)

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

ConstantInterfaceWithNoMethods m = new ClassImplementingThatInterface;

if (m instanceof ConstantInterfaceWithNoMethods)

在这种背景下没有意义。

希望这有帮助!

答案 1 :(得分:5)

这是一种Java模式,它允许您从界面访问常量,而无需反复输入该界面的名称。这种模式自早期开始就存在,在enum进入语言之前很多年。

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

答案 2 :(得分:0)

通常你不需要。一个原因可能是,界面I是“标记界面”。