Почему я не могу определить статический метод в Java-интерфейс?



вот пример:



public interface IXMLizable<T>
{
static T newInstanceFromXML(Element e);
Element toXMLElement();
}


конечно, это не сработает. Но почему бы и нет?



один из возможных вопросов будет, что происходит, когда вы звоните:



IXMLizable.newInstanceFromXML(e);


в этом случае, я думаю, что он должен просто вызвать пустой метод (т. е. {}). Все подклассы будут вынуждены реализовать статический метод, поэтому все они будут в порядке при вызове статического метода. Так почему же это невозможно?



EDIT: я думаю, я ищу ответ это глубже, чем "потому что Java-это".



есть ли особая технологическая причина, по которой статические методы не могут быть перезаписаны? То есть, почему дизайнеры Java решили сделать методы экземпляра переопределяемыми, но не статическими методами?



EDIT: проблема с моим дизайном заключается в том, что я пытаюсь использовать интерфейсы для обеспечения соблюдения соглашения о кодировании.



то есть, цель интерфейса двоякая:




  1. I хотите, чтобы интерфейс IXMLizable позволял мне конвертировать классы, которые реализуют его в XML-элементы (используя полиморфизм, отлично работает).


  2. Если кто-то хочет создать новый экземпляр класса, реализующего интерфейс IXMLizable, он всегда будет знать, что будет создан статический конструктор newInstanceFromXML(элемент e).



есть ли другой способ обеспечить это, кроме как просто поместить комментарий в интерфейс?



EDIT:начиная с Java 8, статические методы теперь разрешены в интерфейсах.

645   0  

Comments

    Ничего не найдено.