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

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

Сообщение Anonymous »

ПРИМЕЧАНИЕ: Этот вопрос появился раньше Java 8. Начиная с Java 8, в интерфейсах разрешены статические методы. Однако их нельзя объявить абстрактными (требуется переопределение) так, как того требует этот вопрос.
Почему я не могу определить статический метод в интерфейсе Java?
Вот пример:

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

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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