24
为什么不能在Java接口中定义静态方法?
编辑: 从Java 8开始,接口中现在允许使用静态方法。 这是示例: public interface IXMLizable<T> { static T newInstanceFromXML(Element e); Element toXMLElement(); } 当然这行不通。但是为什么不呢? 可能的问题之一是,当您致电时会发生什么: IXMLizable.newInstanceFromXML(e); 在这种情况下,我认为它应该只调用一个空方法(即{})。所有子类都将被强制实现static方法,因此在调用static方法时它们都很好。那为什么不可能呢? 编辑:我想我正在寻找比“因为这就是Java的方式”更深的答案。 有某种特殊的技术原因为什么不能覆盖静态方法?也就是说,为什么Java的设计者决定使实例方法可重写而不是静态方法? 编辑:我的设计的问题是我试图使用接口来强制执行编码约定。 也就是说,该接口的目标是双重的: 我希望IXMLizable接口允许我将实现它的类转换为XML元素(使用多态性,效果很好)。 如果有人想创建实现IXMLizable接口的类的新实例,那么他们将始终知道将有一个newInstanceFromXML(Element e)静态构造函数。 除了在界面中添加注释之外,还有其他方法可以确保这一点吗?