Почему я не могу определить статический метод в Java-интерфейс?
вот пример:
public interface IXMLizable<T>
{
static T newInstanceFromXML(Element e);
Element toXMLElement();
}
конечно, это не сработает. Но почему бы и нет?
один из возможных вопросов будет, что происходит, когда вы звоните:
IXMLizable.newInstanceFromXML(e);
в этом случае, я думаю, что он должен просто вызвать пустой метод (т. е. {}). Все подклассы будут вынуждены реализовать статический метод, поэтому все они будут в порядке при вызове статического метода. Так почему же это невозможно?
EDIT: я думаю, я ищу ответ это глубже, чем "потому что Java-это".
есть ли особая технологическая причина, по которой статические методы не могут быть перезаписаны? То есть, почему дизайнеры Java решили сделать методы экземпляра переопределяемыми, но не статическими методами?
EDIT: проблема с моим дизайном заключается в том, что я пытаюсь использовать интерфейсы для обеспечения соблюдения соглашения о кодировании.
то есть, цель интерфейса двоякая:
I хотите, чтобы интерфейс IXMLizable позволял мне конвертировать классы, которые реализуют его в XML-элементы (используя полиморфизм, отлично работает).
Если кто-то хочет создать новый экземпляр класса, реализующего интерфейс IXMLizable, он всегда будет знать, что будет создан статический конструктор newInstanceFromXML(элемент e).
есть ли другой способ обеспечить это, кроме как просто поместить комментарий в интерфейс?
EDIT:начиная с Java 8, статические методы теперь разрешены в интерфейсах.
Comments