界面内可修改的常量

时间:2011-08-29 08:24:46

标签: java interface constants

我知道这基于the Java tutorials

  

除了方法声明之外,接口还可以包含常量声明。接口中定义的所有常量值都是隐式public,static和final。再一次,这些修饰语可以省略。

是否可以通过实现所述接口的所有类来共享和修改接口内的值?

4 个答案:

答案 0 :(得分:9)

理论上,是的,如果您使用可变类型作为“常量”,例如AtomicReference
但是,这将是一个糟糕的设计!

public interface MyInterface{
    AtomicReference<String> NAME = new AtomicReference<String>("Fred");
}


public static void main(final String[] args){
    System.out.println(MyInterface.NAME);
    MyInterface.NAME.set("Jim");
    System.out.println(MyInterface.NAME);
}

<强>输出:

  

佛瑞德
  吉姆

您可以使用集合,地图,数组或任何其他类型可变地保存此模式的值,但我会认真请求您重新考虑它。

答案 1 :(得分:1)

  

是否可以使接口内的值共享   并且可以通过实现所述接口的所有类进行修改?

实现接口的类看到常量但常量是final(实例化一次且从不重新声明)。如果常量是List之类的对象,则可以添加/删除对象。

答案 2 :(得分:1)

你不应该想要这个:),这将是一个很大的黑客。

使用抽象类而不是接口来创建可修改的值, - 如果你可以在你的设计中使用抽象类,那就偏离了当然。

答案 3 :(得分:0)

您的界面可以为您要更改的值声明访问者。您可以调用访问器来获取和设置值,而不是直接引用常量。这些值实际上是实现接口的类的成员。虽然它们可能是静态的,也可能不是静态的,但它们不一定是最终的。