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