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