可能重复:
Interfaces with static fields in java for sharing ‘constants’
我们需要在很多课程和我的问题中使用常量 是最佳实践创建具有公共属性的接口 或其他什么......
public static final String NAME = "Name";
谢谢!
答案 0 :(得分:7)
您应该为此使用不可实现的类,而不是接口。
public final class Constants{
private Constants(){}
public static final String NAME = "Name";
// more constants
}
根据Joshua Bloch在Effective Java中的说法,接口应该只定义行为:
常量接口模式是接口使用不佳。那个 class在内部使用一些常量是一个实现细节。 实现常量接口会导致此实现细节 泄漏到类的导出API中。它并不重要 类实现常量接口的类的用户。在 事实上,它甚至可能使他们感到困惑。更糟糕的是,它代表了一种承诺:如果 在将来的版本中,类被修改,以便它不再需要 要使用常量,它仍然必须实现接口 确保二进制兼容性如果非最终类实现常量 接口,它的所有子类都会污染它们的名称空间 通过界面中的常量。
来源:Effective Java,第19项:仅使用接口来定义类型
答案 1 :(得分:1)
我的建议是为常量创建一个类。不是接口,如果接口没有方法,那么它就不能满足它的用途。
在界面中放置常量是一种流行的技术 Java的日子,但现在许多人认为这是令人厌恶的用法 接口,因为接口应该处理由提供的服务 一个对象,而不是它的数据。同样,一个类使用的常量是 通常是一个实现细节,但将它们放在一个接口中 将他们推广到班级的公共API。
看看here。
答案 2 :(得分:0)
您应该避免在界面中使用此类常量。你可以选择Sean Patrick Floyd提出的解决方案。或者为常量使用枚举类型。
public enum Constants {
NAME("Name");
private final String constant;
private Constats(String constat) {
this.constant = constant;
}
public String constant(){
return this.constat;
}
}
当您的代码需要它们时,您应该使用枚举类型。然后您将在代码中订购。
答案 3 :(得分:0)
- 首先一口气回答你的问题......是的可能,事实上,如果你使用
public int x=5;
或
int x=5
,
这将始终被解释为 public static final int x=5;
- 但这是不正确的方式。
- 您可以更好地使用Enum
或Class with Private Constructor
来处理此问题。
<强>例如强>
具有静态字段的类:
public class Test{
public final String NAME = "Name";
private Test(){}
}
}