Обходной путь статического метода интерфейса Java? - PullRequest
3 голосов
/ 12 ноября 2009

У нас есть заданный интерфейс REST:

POST /calculation
<data>abc</data>

Этот расчет может быть реализован различными логическими «калькуляторами» в зависимости от конфигурации сервера.

Сейчас мы разрабатываем интерфейс Java, который должен реализовывать каждый калькулятор. Интерфейс будет иметь метод для каждой службы REST.

Учитывая, что все вызовы REST (и HTTP) не имеют состояния, каждый метод должен быть статическим. Однако вы не можете определить статические методы в интерфейсах Java. Есть ли хороший обходной путь для этой ситуации?

Мы могли бы определить методы как нестатические, а затем просто сначала создать экземпляр класса калькулятора. Просто кажется более ясным указывать, что методы не сохраняют состояние, используя ключевое слово static в интерфейсе.

Ответы [ 4 ]

7 голосов
/ 12 ноября 2009

Без состояния не означает статический. Отсутствие состояния означает, что компонент не зависит от состояния. Я говорю компонент, потому что вся реализация вашего интерфейса фактически не имеет состояния - в ней не будет переменных-членов. Таким образом, несколько экземпляров классов реализации в порядке. Особенно, если у вас есть контекст для управления ими - например, Spring или EJB.

1 голос
/ 12 ноября 2009

Мне кажется, что вам нужен интерфейс с методами, объявленными как обычные, и реализующий класс, а затем просто создать один экземпляр этого. Нет никакой причины как таковой для того, чтобы сами методы были статичными.

1 голос
/ 12 ноября 2009

Почему вы думаете, что методы должны быть статичными? Они, конечно, могут быть, но это ограничит вас с точки зрения подключения другой реализации позже. Если вас беспокоит потребление памяти или что-то подобное, использование Singleton будет для вас таким же, как статическое, как вы уже сказали в последнем абзаце вашего вопроса.

0 голосов
/ 18 февраля 2016

Если ни один из классов, реализующих этот интерфейс, не нуждается в изменении реализации, используйте static method в интерфейсе как метод helper.

Вам не понадобится обходной путь с java 8 версией.

Java 8 поддерживает статические методы в интерфейсе. Посмотрите эту документацию страница .

Статические методы:

В дополнение к методам по умолчанию вы можете определять статические методы в интерфейсах. (Статический метод - это метод, связанный с классом, в котором он определен, а не с каким-либо объектом. Каждый экземпляр класса совместно использует свои статические методы.)

Это упрощает организацию вспомогательных методов в ваших библиотеках; Вы можете сохранить static methods для interface в том же interface, а не в separate class

Другое решение вашей проблемы - использование Singleton, как предлагается в принятом ответе.

...