我今天使用 Eclipse 的“拉接口”重构特性来创建基于现有类的接口。该对话框提供了将新接口的所有新方法创建为“抽象”方法。
这样做有什么好处?
我认为允许您将接口方法声明为抽象的事实是该语言的一个多余且无害的特性,并不特别鼓励。
为什么 Eclipse 会支持这种风格,或者为什么有人会自愿选择这样做?
澄清:我不是在问为什么接口方法是抽象的,这是显而易见的。我在问为什么要明确选择将它们标记为抽象,因为如果它们在接口中,它们无论如何都是抽象的。
根据Java Language Specification,abstract
接口的关键字已过时,不应再使用。(第 9.1.1.1 节)
abstract
也就是说,由于 Java 倾向于向后兼容,我真的怀疑关键字是否存在会有所作为。
eclipse 中的“这样做的好处”(在接口方法声明上添加抽象)将是jdk1.3 中与 jdt eclipse 编译器的旧兼容性问题
从 1.4 开始,jdk 库不再包含默认的抽象方法(在实现接口的抽象类上)。
这是在欺骗 Eclipse 1.3 编译器诊断,因为它们的实现依赖于它们的存在。
请注意,Javac 1.3 将完全拒绝针对 1.4 库执行(使用 -bootclasspath 选项)。
由于 Eclipse 编译器可能处于 1.4 兼容级别(请参阅 参考资料Workbench>Preferences>Java>Compiler>JDK Compliance
),或者如果使用 1.3 兼容模式,则至少使用 1.3 类库,因此在大多数当前 Eclipse 项目中不需要存在“抽象”。
来自Java SE 7 JLS(Java 语言规范):“允许但不鼓励为接口中声明的方法冗余地指定 public 和/或 abstract 修饰符。”
对于Java SE 5.0:“为了与旧版本的 Java 平台兼容,允许但不鼓励,作为一种风格,为接口中声明的方法冗余指定抽象修饰符。”
根据JLS接口中的方法默认是抽象的,所以关键字是多余的。知道这一点,我永远不会用它来“避免展示混乱”。