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