Answers:
认为这是在按合同设计占主导地位的地方最受欢迎的观点。
接口是合同。在接口中放置常量意味着遵守合同的每个类都同意该常量标识的值/概念。
"at most expose their names"
,而不公开这些值吗?
我工作的一家公司大量使用了导入接口的1常量。我觉得没有什么害处。
您应该问自己的问题是,命名空间对您来说有多重要?就常量而言,这实际上就是一个类所要做的全部。如果您有数千个常量,则可能不希望所有这些常量始终可用。
关于接口的妙处在于,它为您提供了以任何一种方式工作的好处-引入所需的所有名称空间,或者不输入任何名称空间(并使用显式访问它们MyInterface.CONSTANT
)。与几乎相同import static MyInterface.*
,但更明显。
1:如果您不熟悉Java,则不是指import
关键字,而是指通过implements MyConstantsInterface
我来自主要受“ Ada方式”和“ .Net方式”影响的背景。我会说不,在接口内声明常量可能不是最好的。从技术上讲,C#中不允许使用。
我之所以拒绝的原因是,接口是一种定义行为而不是状态或结构的契约形式。常数表示某种状态(原始)或状态的某种方面(复合或聚合)。
我很欣赏将默认值和预定义值提供给实现该接口的每个人的冲动,但是也许最好在抽象或值对象或模板中更好地描述默认状态,其中默认值至少具有最小的上下文。
有关更多技术指南,请下载:download.oracle.com/javase/1.5.0/docs/guide/language/static-import.html
So when should you use static import? Very sparingly! Only use it when you'd otherwise be tempted to declare local copies of constants, or to abuse inheritance (the Constant Interface Antipattern). In other words, use it when you require frequent access to static members from one or two classes. If you overuse the static import feature, it can make your program unreadable and unmaintainable, polluting its namespace with all the static members you import.
Oracle文件