我知道这基于the Java tutorials:
除了方法声明之外,接口还可以包含常量声明。接口中定义的所有常量值都是隐式public,static和final。再一次,这些修饰语可以省略。
是否可以通过实现所述接口的所有类来共享和修改接口内的值?
答案 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)
您的界面可以为您要更改的值声明访问者。您可以调用访问器来获取和设置值,而不是直接引用常量。这些值实际上是实现接口的类的成员。虽然它们可能是静态的,也可能不是静态的,但它们不一定是最终的。