java - 在接口(interface)中定义常量是什么意思?

标签 java interface constants

我知道在 Java 中,有人可以通过声明 public static final 将常量包含在接口(interface)中。但是,假设我有这样一个接口(interface),名为 I,它只包含 public static final 常量,没有方法签名,还有一个名为 C 的类。为什么我要在 C 中实现 I?即我为什么要执行以下操作:

公共(public)类 C 实现 I

既然常量是公共(public)的和静态的,难道我不能通过 I 直接访问它们吗?

最佳答案

这个(反)模式很有用,因为它允许您使用这些常量的名称,而不必在它们前面加上 I.。这曾经是一种常见的技术,但现在您可以使用 import static 以同样的方式导入常量,它已经失宠了。避免它的一个原因是常量集实际上不是一个接口(interface)——它只是一堆值——并且使它成为一个接口(interface)可以让你做一些奇怪的事情,比如写

ConstantInterfaceWithNoMethods m = new ClassImplementingThatInterface;

if (m instanceof ConstantInterfaceWithNoMethods)

这在这种情况下是没有意义的。

希望这对您有所帮助!

关于java - 在接口(interface)中定义常量是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10607305/

相关文章:

JavaFX - 尝试使用 BufferedReader 时卡住 - 未关闭?

java - Spring JPA 属性表达式通过列表中项目的交集查找

doctrine-orm - Symfony 项目应该如何在其实体类中实现 UML2 类接口(interface)?

php - php 类和接口(interface)自动加载的区别

c++ STL map.find() 或 map.operator[] 不能在带有 const 限定符的类成员函数中使用

java - 如何在 if 语句中检查两个字符串是否相等?

java - 读取字节,转换为整数

c# - 在控件之间连接通用功能

android - 是否可以在 android 中定义随配置变化的 XML 常量

c# - C# 编译器是否计算常数的数学?