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

Программисты JAVA общаются здесь
Anonymous
Почему я не могу определить статический метод в интерфейсе Java?

Сообщение Anonymous »

РЕДАКТИРОВАТЬ: Начиная с Java 8, статические методы теперь разрешены в интерфейсах.

Вот пример :

Код: Выделить всё

public interface IXMLizable
{
static T newInstanceFromXML(Element e);
Element toXMLElement();
}
Конечно, это не сработает. Но почему бы и нет?

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

Код: Выделить всё

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

РЕДАКТИРОВАТЬ: Думаю, я ищу более глубокий ответ, чем «потому что так устроен Java». ".

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

РЕДАКТИРОВАТЬ: Проблема с моим дизайном заключается в том, что Я пытаюсь использовать интерфейсы для обеспечения соблюдения соглашения о кодировании.

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

Подробнее здесь: https://stackoverflow.com/questions/512 ... -interface

Вернуться в «JAVA»