【发布时间】:2011-08-29 08:24:46
【问题描述】:
我知道基于the Java tutorials:
除了方法声明之外,接口还可以包含常量声明。接口中定义的所有常量值都是隐式公共的、静态的和最终的。同样,这些修饰符可以省略。
是否可以让实现该接口的所有类共享和修改接口内的值?
【问题讨论】:
我知道基于the Java tutorials:
除了方法声明之外,接口还可以包含常量声明。接口中定义的所有常量值都是隐式公共的、静态的和最终的。同样,这些修饰符可以省略。
是否可以让实现该接口的所有类共享和修改接口内的值?
【问题讨论】:
理论上,是的,如果您为“常量”使用可变类型,例如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);
}
输出:
弗雷德
吉姆
您可以使用 Collections、Maps、Arrays 或任何其他可变地保存此模式值的类型,但我会认真地要求您重新考虑它。
【讨论】:
是否可以共享接口内的值 并且可以被所有实现上述接口的类修改?
实现接口的类看到常量,但常量是最终的(实例化一次,从不重新声明)。如果您的常量是 List 之类的对象,您可以从中添加/删除对象。
【讨论】:
你不应该想要这个:),这将是一个大黑客。
使用抽象类代替接口来创建可修改的值——当然,如果您可以在设计中使用抽象类。
【讨论】:
您的接口可以为您想要更改的值声明访问器。您可以调用访问器来获取和设置值,而不是直接引用常量。这些值实际上是实现接口的类的成员。虽然它们可能是静态的,也可能不是静态的,但它们不一定是最终的。
【讨论】: